1 /**\
2 每组物品有若干个,同一组内的物品最多只能选一个
3 \**/
4 #include
5 using namespace std;
6 const int N = 1e3 + 9;
7 int n, m, v[N][N], w[N][N], s[N];
8 int f[N];
9 signed main() {
10 ios::sync_with_stdio(false);
11 cin >> n >> m;
12 for(int i = 1; i <= n; i++) {
13 cin >> s[i];
14 for(int j = 0; j < s[i]; j++) {
15 cin >> v[i][j] >> w[i][j];
16 }
17 }
18 for(int i = 1; i <= n; i++) {
19 for(int j = m; j > 0; j--) {
20 for(int k = 0; k < s[i]; k++) {
21 if(v[i][k] <= j)
22 f[j] = max(f[j], f[j - v[i][k]] + w[i][k]);
23 }
24 }
25 }
26 cout << f[m];
27 return 0;
28 }