#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct node{
int p,q,v;
}b[555];
bool cmp(node a,node b)
{
return a.q-a.p<b.q-b.p;
}
int dp[5555];
int main()
{
int N,M;
while(cin>>N>>M)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=N;i++)
cin>>b[i].p>>b[i].q>>b[i].v;
sort(b+1,b+N+1,cmp);
for(int i=1;i<=N;i++)
{
for(int j=M;j>=b[i].q;j--)
dp[j]=max(dp[j],dp[j-b[i].p]+b[i].v);
}
cout<<dp[M]<<endl;
}
return 0;
}