#include <iostream>
#include <vector>

using namespace std;

// DP[i][w][m] : i???????????§??????????????\???????????????w?????¨??????????????°????????????????????§??????????°?????????????m
long long DP[2][10001][201];

int main(){
    int n,w;
    cin >> n >> w;
    vector<int> v;
    for(int i=0;i<n;i++){
        int t;
        cin >> t;
        v.push_back(t);
    }
    DP[0][0][200] = 1;
    for(int i=0;i<n;i++){
        int dp_a = i % 2;
        int dp_b = (i + 1) % 2;
        for(int j=0;j<=w;j++){
            for(int k=0;k<=200;k++){
                DP[dp_b][j][k] = 0;
            }
        }
        for(int j=0;j<=w;j++){
            for(int k=0;k<=200;k++){
                if(DP[dp_a][j][k] == 0)
                    continue;
                //??\?????????
                {
                    int m;
                    if(k == 200 || v[i] < v[k]){
                        m = i;
                    }else{
                        m = k;
                    }
                    DP[dp_b][j][m] += DP[dp_a][j][k];
                    DP[dp_b][j][m] %= 1000000007;
                }
                //??\??????
                if(v[i] + j <= w){
                    DP[dp_b][v[i]+j][k] += DP[dp_a][j][k];
                    DP[dp_b][v[i]+j][k] %= 1000000007;
                }
            }
        }
    }
    long long ans=0;
    for(int j=0;j<=w;j++){
        for(int k=0;k<=200;k++){
            if(k != 200 && n <= k)
                continue;
            if(k == 200 || w-j < v[k]){
                ans = (ans + DP[n%2][j][k]) % 1000000007;
            }
        }
    }
    
    cout << ans << endl;
}