//状态表示:f[i][j],前i个物品,和为j可选方案数
//状态转移:f[i-1][j]+f[i-1][j-a[i]]//不选和选
#include<iostream>
#include<algorithm>
using namespace std;
const int N=110,M=10010;
int a[N];
int f[M];
int main()
{
int n,m;
cin>>n>>m;
f[0]=1;//无空间放法,当j=a[i],f[j]肯定至少有一种方案
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=m;j>=a[i];j--)
f[j]+=f[j-a[i]];
cout<<f[m]<<endl;
return 0;
}