//一定要刚好把钱花完,问有多少种方法
//dp[i]代表花i钱的方法数
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
//一定要刚好把钱花完,问有多少种方法
//dp[i]代表花i钱的方法数
int dp[10010];
const int N=110;
int a[N];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>a[i];
memset(dp,0,sizeof(dp));
dp[0]=1; //一块钱也不花是一种方案
for(int i=1;i<=n;++i)
for(int j=m;j>=a[i];--j)
{
dp[j]+=dp[j-a[i]];
}
cout<<dp[m]<<endl;
return 0;
}
for(int i=1;i<=n;++i)
{
for(int j=V;j>=v[i];--j)
{
for(int k=W;k>=w[i];--k)
dp[j][k]=max(dp[j][k],dp[j-v[i]][k-w[i]]+c[i]); //写急了写错括号位置导致一直输出0
}
}
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int V,W,n;
int dp[410][410]; //体积为i质量为j时的最大卡路里
int v[55];
int w[55];
int c[55];
int main()
{
cin>>V>>W>>n;
for(int i=1;i<=n;++i)
{
cin>>v[i]>>w[i]>>c[i];
// cout<<v[i]<<' '<<w[i]<<' '<<c[i]<<endl;
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;++i)
{
for(int j=V;j>=v[i];--j)
{
for(int k=W;k>=w[i];--k)
dp[j][k]=max(dp[j][k],dp[j-v[i]][k-w[i]]+c[i]); //写急了写错括号位置导致一直输出0
}
}
// cout<<V<<' '<<W<<endl;
cout<<dp[V][W]<<endl;
return 0;
}
//???