#include<bits/stdc++.h>
using namespace std;
int t, n, cnt;
unordered_map<int, int> s[100005];
vector<pair<int, int>> v(1);
int dfs(int now, int wgt){
if(s[now][wgt])
return s[now][wgt];
if(now > n)
return 0;
else if(wgt >= v[now].first)
return s[now][wgt] = max(dfs(now + 1, wgt - v[now].first) + v[now].second, dfs(now + 1, wgt));
else
return 0;
}signed main(){
scanf("%d%d", &n, &t);
for(int i = 1; i <= n; ++i){
pair<int, int> p;
int k;
scanf("%d%d%d", &p.second, &p.first, &k);
v.resize(v.size() + k, p);
cnt += k;
}n = cnt;
sort(v.begin(), v.end());
printf("%d", dfs(1, t));
return 0;
}