附源码
#include<bits/stdc++.h>
#define max(a,b) a<b?b:a
using namespace std;
const int MAXN=1e5+5,MAXG=1e2;
int n,m,g[MAXG],v[MAXG][MAXN],c[MAXG][MAXN],bg[MAXG][MAXN],f[MAXN];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>c[i][0]>>g[i];
for(int j=1;j<=g[i];j++)
{
cin>>c[i][j]>>v[i][j];
c[i][10001]+=c[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=g[i];j++)
{
for(int k=c[i][10001];k>=c[i][j];k--)
{
bg[i][k]=max(bg[i][k],bg[i][k-c[i][j]]+v[i][j]);
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=m;j>=0;j--)
{
for(int k=0;k<=min(j-c[i][0],c[i][10001]);k++)
{
f[j]=max(f[j],f[j-k-c[i][0]]+bg[i][k]);
}
}
}
cout<<f[m]<<endl;
return 0;
}