#include<stdio.h>
#include<string.h>
long long int dp[501][501];
int n,q,W,V,w[110],v[110],g[110];
int min( int a,int b)
{
if(a>b)
return b;
else
return a;
}
long long int max(long long int a,long long int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
int i,j,k;
scanf("%d %d",&n,&q);
//先判断q本身,再自减
for(i=1;i<=n;i++)
{
scanf("%d %d %d",&w[i],&v[i],&g[i]);
}
memset(dp,-1,sizeof(dp));
dp[0][0]=0;
for(i=1;i<=n;i++)
{
for(j=500;j>=0;j--)
{
for(k=500;k>=0;k--)//从大到小,不然会出现本轮改变的数据影响本轮更大数据的情况(比如呈倍数关系时)。
{
if(dp[j][k]>=0)
if(j+w[i]<=500)
dp[j+w[i]][min(500,k+v[i])]=max(dp[j][k]+g[i],dp[j+w[i]][min(500,k+v[i])]);
}
}
}