#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];
}