#include<iostream>
using namespace std;
int dp[40001];
int w[100001];
int v[100001];
int c[100001];
int main()
{
int W, n;
cin >> n >> W;
for (int i = 1; i <= n; i++)
{
cin >> v[i] >> w[i] >> c[i];
}
/*
for (int i = 1; i <= n; i++)
for (int j = W; j > 0; j--)
{
j >= w[i] && dp[j - w[i]] + v[i] > dp[j] ? dp[j] = dp[j - w[i]] + v[i] : dp[j] = dp[j];
}
cout << dp[W] << "\n";*/
for (int i = 0; i <= W; i++)
{
dp[i] = 0;
}
for (int i = 1; i <= n; i++)
{
if (c[i]*w[i] > W)//完全
{
for (int j = 1; j <= W; j++)
{
j > w[i] && dp[j - w[i]] + v[i] > dp[j] ? dp[j] = dp[j - w[i]] + v[i] : dp[j] = dp[j];
}
}
else//01
{
for (int y = 1; c[i] > 0; y<<=2)
{
int k = min(y, c[i]);
for (int j = W; j >= w[i]*k; j--)
{
dp[j] = max(dp[j],dp[j-w[i]*k]+v[i]*k);
}
c[i] -= y;
}
}
}
cout << dp[W];
}