#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,v,p,g,gp,pv;
int dp[55][100010];
int main(){
int i,j,k;
//freopen("vidgame.in","r",stdin);
//freopen("vidgame.out","w",stdout);
scanf("%d%d",&n,&v);
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
scanf("%d%d",&p,&g);
for(j=p;j<=v;j++)dp[i][j]=dp[i-1][j-p];//买了i个平台剩下j元 (j-p)为买其他剩的钱
for(j=1;j<=g;j++)//每种游戏
{
scanf("%d%d",&gp,&pv);
for(k=v;k>=p+gp;k--) dp[i][k]=max(dp[i][k],dp[i][k-gp]+pv);//01
}
for(j=0;j<=v;j++) dp[i][j]=max(dp[i][j],dp[i-1][j]);//重新判断一次
}
printf("%d",dp[n][v]);
return 0;
}