#include<bits/stdc++.h>
using namespace std;
#define MOD 1000000007

int main(){

    int n, w; cin >> n >> w;
    vector<int> c(n);
    for(int i = 0; i < n; i++) cin >> c[i];
    sort(c.begin(), c.end());
    int now = 0;
    int next = 1;

    //dp[i][j][k] := i番目まで見て、未だとってない友達の中で重さが最小のものがc[j]で,合計の重さがkである通り数
    vector<vector<vector<int> > > dp(2, vector<vector<int> > (n, vector<int> (w + 1, 0)));
    dp[0][0][0] = 1;
    for(int i = 0; i < n; i++){

        for(int j = 0; j < n; j++){
            for(int k = 0; k <= w; k++){
                dp[next][j][k] = 0;
            }
        }

        for(int j = 0; j < n; j++){
            for(int k = 0; k <= w; k++){

                //とる
                if(k + c[i] <= w){
                    if(j == i && j + 1 < n) (dp[next][j + 1][k + c[i]] += dp[now][j][k]) %= MOD;
                    else if(j <= i) (dp[next][j][k + c[i]] += dp[now][j][k]) %= MOD;
                }
                //とらない
                (dp[next][j][k] += dp[now][j][k]) %= MOD;
            }
        }


        swap(now, next);
    }

    int ans = 0;
    for(int j = 0; j < n; j++){
        for(int k = 0; k <= w; k++){
            if(c[j] + k > w) (ans += dp[now][j][k]) %= MOD;
        }
    }

    /*for(int i = 0; i < n + 1; i++){
        for(int j = 0; j < n; j++){
            for(int k = 0; k < w + 1; k++){
                cout << dp[i][j][k] << " ";
            }
            cout << endl;
        }
        cout << endl;
    }*/
    cout << ans << endl;
        
    return 0;   
}
