#include<bits/stdc++.h> using namespace std ; const int N=1010; int n,m; int f[N]; struct Thing { int kind;//记录背包种类 int v,w; }; vector<Thing>things; int main() { cin>>n>>m; for(int i=0; i<n; i++) { int v,w,s; cin>>v>>w>>s; if(s<0) things.push_back({-1,v,w});//01背包 else if(s==0) things.push_back({0,v,w});//完全背包 else {//多重背包 二进制优化 转换为01背包 for(int k=1; k<=s; k*=2) { s-=k; things.push_back({-1,v*k, w*k}); } if(s>0) things.push_back({-1,v*s,w*s}); } } for(auto thing:things) { if(thing.kind<0) {//01背包 for(int j=m; j>=thing.v; j--) f[j]=max(f[j],f[j-thing.v]+thing.w); } else {//完全背包 for(int j=thing.v; j<=m; j++) f[j]=max(f[j],f[j-thing.v]+thing.w); } } cout<<f[m]<<endl; return 0; }