/*
输入
定义2个数组存价值,各个种类物品使用数量
遍历n次背包内存
每次更新另一数组使用数
f[i][j]=max(f[i-1][j]max(f[i][j-1],f[i][j-vi]+wi)
*/
#include<bits/stdc++.h>
using namespace std;
int n,m,v[1001],w[1001],s[1001],f[1001][1001],e[1001][3];
int main(){
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&v[i],&w[i],&s[i]);
if(s[i]<0)e[i][1]=-1;
else if(s[i]==0)e[i][1]=1;
else e[i][1]=s[i];
}
for(int i=1;i<=n;i++){
if(e[i][2]==e[i][1])f[1][i]=f[1][i-1];
else if(i>=v[1]*f[1][i-1]/w[1]+v[1]){
f[1][i]=f[1][i-1]+w[1];
e[i][2]++;
}
}
e[1][2]=0;
for(int i=2;i<=m;i++){
for(int j=1;j<=n;j++){
f[i][j]=max(f[i][j-1],f[i-1][j]);
if(i>=s[i]&&f[i][j-v[i]]+w[i]>f[i][j]&&e[i][2]!=e[i][1]){
e[i][2]++;
f[i][j]=f[i][j-v[i]]+w[i];
}
}
}
printf("%d",f[m][n]);
return 0;
}
/**************************************************************
Problem: 1905
User: chenshuo
Language: C++
Result: Wrong Answer
****************************************************************/