#include <cstdio>
#include <iostream>
#include <functional>
#include <algorithm>
using namespace std;
typedef long long ll;
#define MOD 1000000007
int N,W;
int w[205],imos[205];
ll dp[205][10010];
ll sum(int k,int a,int b)//(a,b]
{
	if(b==-1)return 0ll;
	if(a==-1)return dp[k][b];
	return (dp[k][b]-dp[k][a]+MOD)%MOD;
}
ll wsum(int a,int b)//[a,b]
{
	return (imos[b]-(a==0?0:imos[a-1])+MOD)%MOD;
}
int main()
{
	scanf("%d %d",&N,&W);
	for(int i=0;i<N;i++)scanf("%d",&w[i]);
	sort(w,w+N,greater<int>());
	for(int i=0;i<N;i++)imos[i]=w[i];
	for(int i=0;i<N;i++)imos[i+1]+=imos[i];
	dp[0][w[0]]=1;
	dp[0][0]=1;
	for(int i=1;i<N;i++)
	{
		for(int j=0;j<=W;j++)
		{
			if(j-w[i]>=0)dp[i][j]=(dp[i-1][j-w[i]]+dp[i-1][j])%MOD;
			else dp[i][j]=dp[i-1][j];
			//cout << dp[i][j] << ' ';
		}
		//cout << endl;
	}
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<=W;j++)
		{
			dp[i][j+1]=(dp[i][j+1]+dp[i][j])%MOD;
			//cout << dp[i][j] << ' ';
		}
		//cout << endl;
	}
	ll ans = 0;
	for(int i=0;i<N;i++)
	{
		int beg,end;
		beg = W - wsum(N-1-i,N-1);
		end = beg + w[N-1-i] - w[N-i];
		beg = max(beg,-1);
		end = max(end,-1);
		ans += sum(N-1-i,beg,end);
		//cout << beg  << ' '<< end << ' '  << sum(N-1-i,beg,end) << endl;
		ans %= MOD;
	}
	printf("%lld\n",ans);
	return 0;
}