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

#define int long long
#define fileio(name) if (fopen(name".inp", "r")) freopen(name".inp", "r", stdin), freopen(name".out", "w", stdout)

const int mod = 1e9 + 7;
struct Matrix {
    vector<vector<int>> M;
    int m, n;

    auto & operator [] (int i) {
        return M[i];
    }

    Matrix(int _m, int _n) {
        m = _m; n = _n;
        M = vector<vector<int>>(m, vector<int>(n, 0));
    }
    Matrix(vector<vector<int>> _M) {
        M = _M;
        m = M.size();
        n = M[0].size();
    }

    friend ostream & operator << (ostream &out, const Matrix &d) {
        for (auto x : d.M) {
            for (auto y : x) out << y << ' ';
            out << '\n';
        }
        return out;
    }
};

Matrix Identity(int x) {
    Matrix C(x, x);
    for (int i = 0; i < x; i++) C.M[i][i] = 1;
    return C;
}

Matrix operator *(Matrix A, Matrix B) {
    assert(A.n == B.m);

    Matrix C(A.m, B.n);
    for (int i = 0; i < A.m; i++) {
        for (int j = 0; j < B.n; j++) {
            int sum = 0;
            for (int k = 0; k < A.n; k++) {
                sum += A.M[i][k] * B.M[k][j];
                sum %= mod;
            }
            C.M[i][j] = sum;
        }
    }
    return C;
}

Matrix powpow(Matrix A, int y) {
    assert(A.n == A.m);

    Matrix res = Identity(A.n);
    for (; y > 0; y >>= 1) {
        if (y&1) res = res*A;
        A = A*A;
    }
    return res;
}


int powmod(int a, int b) {
    int res = 1;
    for (; b > 0; b >>= 1) {
        if (b&1) res = (res*a) % mod;
        a = (a*a) % mod;
    }
    return res;
}

const int maxn = 11;
int n1, m, arr[maxn];

int n = 0;

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    fileio("");
    // freopen("debug.txt", "w", stderr);

    cin >> n1 >> m;
    vector<pair<int, int>> E;
    for (int i = 1; i <= n1; i++) {
        cin >> arr[i];
        for (int j = 1; j < arr[i]; j++) {
            E.push_back({n+j, n+j+1});
        }
        E.push_back({n+arr[i], n+1});
        if (i > 1) {
            E.push_back({n-arr[i-1]+1, n+1});
        }
        n += arr[i];
    }

    Matrix C(n, n), A(1, n); A[0][0] = 1;
    for (auto e: E) {
        int u = e.first - 1, v = e.second - 1;
        C[u][v]++;
    }

    A = A * powpow(C, n1-1) * powpow(C, m);

    cout << A[0][n-arr[n1]];

    return 0 ^ 0;
}
