#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
****************************************************************/