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

#define print(a)          \
    for (auto x : a)      \
        cout << x << " "; \
    cout << endl
#define print_upto(a, n)        \
    for (int i = 0; i < n; i++) \
        cout << a[i] << " ";    \
    cout << endl
#define take(x, n)              \
    for (int i = 0; i < n; i++) \
        cin >> x[i];

#define watch(x) cout << (#x) << " is " << (x) << "\n"
#define watch2(x, y) cout << (#x) << " is " << (x) << " and " << (#y) << " is " << (y) << "\n"
#define watch3(x, y, z) cout << (#x) << " is " << (x) << " and " << (#y) << " is " << (y) << " and " << (#z) << " is " << (z) << "\n"

#define ll long long
#define ff first
#define ss second
#define null NULL
#define all(c) (c).begin(), (c).end()
#define nl "\n"

#define ld long double
#define eb emplace_back
#define pb push_back
#define pf push_front
#define mod 1000000007

typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef pair<ll, ll> pll;
typedef map<ll, ll> mll;

ll n, x;
ll a[105];

ll f(ll i, ll sum, vector<vector<ll>> &dp)
{
    if (sum == x)
        return 1;
    else if (sum > x || i == n + 1)
        return 0;

    if (dp[i][sum] != -1)
        return dp[i][sum];

    ll ans = 0;
    ans = (ans + f(i, sum + a[i], dp)) % mod;
    ans = (ans + f(i + 1, sum, dp)) % mod;

    return dp[i][sum] = ans;
}

int main()
{

    // Use ctrl+shift+b ( second option )
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    ll t = 1;
    // cin >> t;

    while (t--)
    {
        cin >> n >> x;

        for (ll i = 1; i <= n; i++)
        {
            cin >> a[i];
        }

        vector<vector<ll>> dp(n + 1, vector<ll>(x + 1, -1));

        cout << f(1, 0, dp) << nl;
    }

    return 0;
}

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

// int main()
// {
//     int mod = 1e9 + 7;
//     int n, target;
//     cin >> n >> target;
//     vector<int> x(n);
//     for (int &v : x)
//         cin >> v;

//     vector<vector<int>> dp(n + 1, vector<int>(target + 1, 0));
//     dp[0][0] = 1;
//     for (int i = 1; i <= n; i++)
//     {
//         for (int j = 0; j <= target; j++)
//         {
//             dp[i][j] = dp[i - 1][j];
//             int left = j - x[i - 1];
//             if (left >= 0)
//             {
//                 (dp[i][j] += dp[i][left]) %= mod;
//             }
//         }
//     }
//     cout << dp[n][target] << endl;
// }