structui {int fir; int sec;}; constint maxn = 1005; int dp[50][503]; int dp2[4][503]; int tmp[4][503]; signedmain() { per() { int n; cin >> n; map<string, int> ma; string in; for (int i = 1; i <= n; ++i) { cin >> in; ma[in] = i; } int m; cin >> m; int x, y; vector<ui> mts[51]; for (int i = 1; i <= m; ++i) { cin >> in >> x >> y; mts[ma[in]].push_back(ui{x, y}); } int t, p; cin >> t >> p; for(int i=0;i<=n;++i){ for(int j=0;j<=502;++j){ dp[i][j]=0; } } for (int c = 1; c <= n; ++c) { int sz = mts[c].size(); for (int i = 0; i < sz; ++i) { int v = mts[c][i].fir; int w = mts[c][i].sec; for (int j = t; j >= w; --j) { dp[c][j] = max(dp[c][j], dp[c][j - w] + v); } } } memset(dp2,0xc0,sizeof dp2); dp2[0][0]=0; for (int i = 1; i <=n; ++i) { memset(tmp,0xc0,sizeof tmp); for (int j = t;j>=0; --j) { int w1 = dp[i][j] < 60 ? 1 : 0; int w2 = j; int v = min(dp[i][j],100); for (int w = p; w >= w1; --w) { for (int k = t; k >= w2; --k) { if (w - w1 >= 0 && k - w2 >= 0) tmp[w][k] = max(tmp[w][k], dp2[w - w1][k - w2] + v); } } } memcpy(dp2,tmp,sizeof tmp); } int ans=-1; for(int i=0;i<=p;++i){ ans=max(ans,dp2[i][t]); } cout<<ans<<endl; } }