多重背包
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=2010;
int n,m;
int dp[maxn];
int main(void){
cin>>n>>m;
int v,w,s;
for(int i=0;i<n;++i){
cin>>v>>w>>s;
if(v*s>=m){ //情况1
for(int j=v;j<=m;++j){
dp[j]=max(dp[j],dp[j-v]+w);
}
}else{
//情况2
int k=1;
while(k<s){
int kv=k*v,kw=k*w;
for(int j=m;j>=kv;--j){
dp[j]=max(dp[j],dp[j-kv]+kw);
}
s-=k;
k*=2;
}
if(s>0){
k=s;
int kv=k*v,kw=k*w;
for(int j=m;j>=kv;--j)
dp[j]=max(dp[j],dp[j-kv]+kw);
}
}
}
cout<<dp[m]<<endl;
}