#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef unsigned int uint;
int inp() {
    int x = 0, c;
    for (; (uint)((c = getchar()) - '0') >= 10; ) { if (c == '-') return -inp(); if (!~c) throw ~0; }
    do { x = (x << 3) + (x << 1) + (c - '0'); } while ((uint)((c = getchar()) - '0') < 10);
    return x;
}

#define SUM(a,b) { a += (b); if(a >= 1000000007) a -= 1000000007; }
int dp[2][10001][201];
int in[201];
int main(){
	int N = inp() , W = inp();
	
	for(int i = 1 ; i <= N ; i++) in[i] = inp();
	sort(in+1,in+N+1,greater<int>());
	in[0] = 99999;
	int x = 0 , y = 1;
	dp[x][0][0] = 1;
	
	for(int i = 1 ; i <= N ; i++){
		for(int j = 0 ; j <= W ; j++) for(int k = 0 ; k <= N ; k++) dp[y][j][k] = 0;
		for(int j = 0 ; j <= W ; j++) for(int k = 0 ; k <= N ; k++) SUM(dp[y][j][i],dp[x][j][k]);
		
		int w = in[i];
		for(int j = w ; j <= W ; j++)
			for(int k = 0 ; k < i ; k++)
				SUM(dp[y][j][k],dp[x][j-w][k]);
		swap(x,y);
	}
	
	int sum = 0;
	for(int i = 0 ; i <= W ; i++){
		for(int j = 0 ; j <= N ; j++){
			if(W < i+in[j]) SUM(sum,dp[x][i][j]);
		}
	}
	cout << sum << endl;
}