#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 2e5 + 5;
long long n, W; // n: số loại đồ vật, W: sức chứa tối đa của balo
long long w, v, c; // w: khối lượng, v: giá trị, c: số lượng của một loại đồ vật
long long dp[MaxN]; // dp[j]: giá trị lớn nhất đạt được với sức chứa j
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> W;
for(long long i = 1; i <= n; i++)
{
cin >> w >> v >> c;
long long k = 1;
while(k <= c)
{
for(long long j = W; j >= k * w; j--)
{
dp[j] = max(dp[j], dp[j - k * w] + k * v);
}
c -= k;
k <<= 1;
}
if(c > 0)
{
for(long long j = W; j >= c * w; j--)
{
dp[j] = max(dp[j], dp[j - c * w] + c * v);
}
}
}
cout << dp[W];
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxvbmcgbG9uZyBNYXhOID0gMmU1ICsgNTsKCmxvbmcgbG9uZyBuLCBXOyAgICAgICAgICAgIC8vIG46IHPhu5EgbG/huqFpIMSR4buTIHbhuq10LCBXOiBz4bupYyBjaOG7qWEgdOG7kWkgxJFhIGPhu6dhIGJhbG8KbG9uZyBsb25nIHcsIHYsIGM7ICAgICAgICAgIC8vIHc6IGto4buRaSBsxrDhu6NuZywgdjogZ2nDoSB0cuG7iywgYzogc+G7kSBsxrDhu6NuZyBj4bunYSBt4buZdCBsb+G6oWkgxJHhu5MgduG6rXQKbG9uZyBsb25nIGRwW01heE5dOyAgICAgICAgIC8vIGRwW2pdOiBnacOhIHRy4buLIGzhu5tuIG5o4bqldCDEkeG6oXQgxJHGsOG7o2MgduG7m2kgc+G7qWMgY2jhu6lhIGoKCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CgogICAgY2luID4+IG4gPj4gVzsKCiAgICBmb3IobG9uZyBsb25nIGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gdyA+PiB2ID4+IGM7CgogICAgICAgIGxvbmcgbG9uZyBrID0gMTsKCiAgICAgICAgd2hpbGUoayA8PSBjKQogICAgICAgIHsKICAgICAgICAgICAgZm9yKGxvbmcgbG9uZyBqID0gVzsgaiA+PSBrICogdzsgai0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkcFtqXSA9IG1heChkcFtqXSwgZHBbaiAtIGsgKiB3XSArIGsgKiB2KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYyAtPSBrOwogICAgICAgICAgICBrIDw8PSAxOwogICAgICAgIH0KCiAgICAgICAgaWYoYyA+IDApCiAgICAgICAgewogICAgICAgICAgICBmb3IobG9uZyBsb25nIGogPSBXOyBqID49IGMgKiB3OyBqLS0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRwW2pdID0gbWF4KGRwW2pdLCBkcFtqIC0gYyAqIHddICsgYyAqIHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgZHBbV107Cn0=