#include <iostream>
using namespace std;
/*
多重背包问题
*/
int dp[1010][1010];
int vrr[1010];
int wrr[1010];
int srr[1010];
int main()
{
int n,v,i,j,k,t;
cin>>n>>v;
for(i=1;i<=n;i++)
cin>>vrr[i]>>wrr[i]>>srr[i];
for(i=1;i<=n;i++)//从前i种物品选
{
for(j=1;j<=v;j++)//背包承重为j的情况下的最大值
{
t=j/vrr[i];
t=t>srr[i]?srr[i]:t;//第i种物品的数目
for(k=0;k<=t;k++)
{
dp[i][j]=max(dp[i][j],dp[i-1][j-k*vrr[i]]+k*wrr[i]);
}
}
}
cout<<dp[n][v]<<endl;
return 0;
}