#include<algorithm>
#include<iostream>
const int maxn = 6005;
using namespace std;
int w[maxn],c[maxn],s[maxn],f[maxn];
int main(){
int n,m;
cin>>n>>m;//奖品的种数,拨款金额
for(int i=1;i<=n;i++) cin>>w[i]>>c[i]>>s[i];//第i种奖品价格,价值,最多购买的数量
//f[j]表示计划j元买奖品实现最大价值
for(int i=1;i<=n;i++){//从前i种奖品中挑选奖品放入背包
for(int j=0;j<=m;j++){//背包中奖品总价格为j 【逆序输出正确答案1040,顺序输出错误答案1650,望指点】
for(int k=0;k<=s[i];k++){//其中背包中第i种奖品数量为k
if(j-k*w[i]>=0)//只有k个第i种奖品总价值小于或等于j元,k个第i种奖品才能放入背包
f[j] = max(f[j],f[j-k*w[i]]+k*c[i]);
//计划j元买奖品实现的最大价值=k个第i种奖品的总价值+计划j-k*w[i]元买奖品实现的最大价值
}
}
}
cout<<f[m];
return 0;
}