#include "bits/stdc++.h"

using namespace std;

using ll = long long;
using ld = long double;
using P = pair<int, int>;
constexpr ld EPS = 1e-12;
constexpr int INF = numeric_limits<int>::max() / 2;
constexpr int MOD = 1e9 + 7;

int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);

    int N, W;
    cin >> N >> W;
    vector<int> w(N + 1, 0);
    // dp[i][j] := w[i, N] を使って重さjを作る組み合わせ
    vector<vector<ll>> dp(N + 2, vector<ll>(W + 1, 0));
    // sum[i] := w[1, i] の和
    vector<int> sum(N + 1, 0);
    for (int i = 1; i <= N; i++)
    {
        cin >> w[i];
    }
    sort(w.begin(), w.end());
    for (int i = 1; i <= N; i++)
        sum[i] = sum[i - 1] + w[i];
    dp[N + 1][0] = 1;
    for (int i = N; i >= 1; i--)
    {
        for (int j = 0; j <= W; j++)
        {
            dp[i][j] += dp[i + 1][j];
            dp[i][j] %= MOD;
            if (j + w[i] <= W)
            {
                dp[i][j + w[i]] += dp[i + 1][j];
                dp[i][j + w[i]] %= MOD;
            }
        }
    }
    ll res = 0;
    if (sum[N] <= W)
        res++;
    for (int j = max(0, W - w[1] + 1); j <= W; j++)
    {
        res += dp[2][j];
        res %= MOD;
    }
    for (int i = 1; i < N; i++)
    {
        if (sum[i] > W)
            break;
        for (int j = max(0, W - sum[i] - w[i + 1] + 1); j <= W - sum[i]; j++)
        {
            res += dp[i + 2][j];
            res %= MOD;
        }
    }
    cout << res << endl;
}

