#include <bits/stdc++.h> using namespace std; int n,V; struct kk { int w,v,m; }; kk a[1001]; int f[20001]; void completebag(int v,int w) { for(register int i=v; i<=V; ++i) f[i]=max(f[i],f[i-v]+w); return; } void zeronebag(int v,int w) { for(register int i=V; i>=v; --i) f[i]=max(f[i],f[i-v]+w); return; } void multiplebag(int v,int w,int m) { if(m*v>V) { completebag(v,w); return; } int k=1; while(k<=m) { zeronebag(v*k,w*k); m-=k; k*=2; } zeronebag(v*m,w*m); return; } int main() { scanf("%d%d",&n,&V); for(register int i=1; i<=n; ++i) scanf("%d%d%d",&a[i].v,&a[i].w,&a[i].m); memset(f,0x0,sizeof(f)); for(register int i=1; i<=n; ++i) { if(a[i].m==-1) zeronebag(a[i].v,a[i].w); if(a[i].m==0) completebag(a[i].v,a[i].w); if(a[i].m>0) multiplebag(a[i].v,a[i].w,a[i].m); } printf("%d\n",f[V]); return 0; } /************************************************************** Problem: 1905 User: admin Language: C++ Result: Accepted Time:31 ms Memory:2168 kb ****************************************************************/