#include<bits/stdc++.h>
using namespace std;
const int N = 100020;
int f[N];
int n,m;
struct node{
int v,w;
};
vector<node> vec;
int main(){
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
int v,w,s;
cin >> w >> v >> s;
for (int k = 1; k <= s ; k *= 2){
s -= k;
vec.push_back({v * k, w * k});
}
if (s >= 0)
vec.push_back({v * s, w * s});
}
for (int i = 1; i <= vec.size(); i ++)
for (int j = m; j >= vec[i].v; j -- )
f[j] = max(f[j], f[j - vec[i].v] + vec[i].w);
cout << f[m];
return 0;
}