#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;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBmaWxlaW8obmFtZSkgaWYgKGZvcGVuKG5hbWUiLmlucCIsICJyIikpIGZyZW9wZW4obmFtZSIuaW5wIiwgInIiLCBzdGRpbiksIGZyZW9wZW4obmFtZSIub3V0IiwgInciLCBzdGRvdXQpCgpjb25zdCBpbnQgbW9kID0gMWU5ICsgNzsKc3RydWN0IE1hdHJpeCB7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IE07CiAgICBpbnQgbSwgbjsKCiAgICBhdXRvICYgb3BlcmF0b3IgW10gKGludCBpKSB7CiAgICAgICAgcmV0dXJuIE1baV07CiAgICB9CgogICAgTWF0cml4KGludCBfbSwgaW50IF9uKSB7CiAgICAgICAgbSA9IF9tOyBuID0gX247CiAgICAgICAgTSA9IHZlY3Rvcjx2ZWN0b3I8aW50Pj4obSwgdmVjdG9yPGludD4obiwgMCkpOwogICAgfQogICAgTWF0cml4KHZlY3Rvcjx2ZWN0b3I8aW50Pj4gX00pIHsKICAgICAgICBNID0gX007CiAgICAgICAgbSA9IE0uc2l6ZSgpOwogICAgICAgIG4gPSBNWzBdLnNpemUoKTsKICAgIH0KCiAgICBmcmllbmQgb3N0cmVhbSAmIG9wZXJhdG9yIDw8IChvc3RyZWFtICZvdXQsIGNvbnN0IE1hdHJpeCAmZCkgewogICAgICAgIGZvciAoYXV0byB4IDogZC5NKSB7CiAgICAgICAgICAgIGZvciAoYXV0byB5IDogeCkgb3V0IDw8IHkgPDwgJyAnOwogICAgICAgICAgICBvdXQgPDwgJ1xuJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dDsKICAgIH0KfTsKCk1hdHJpeCBJZGVudGl0eShpbnQgeCkgewogICAgTWF0cml4IEMoeCwgeCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHg7IGkrKykgQy5NW2ldW2ldID0gMTsKICAgIHJldHVybiBDOwp9CgpNYXRyaXggb3BlcmF0b3IgKihNYXRyaXggQSwgTWF0cml4IEIpIHsKICAgIGFzc2VydChBLm4gPT0gQi5tKTsKCiAgICBNYXRyaXggQyhBLm0sIEIubik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IEEubTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBCLm47IGorKykgewogICAgICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBBLm47IGsrKykgewogICAgICAgICAgICAgICAgc3VtICs9IEEuTVtpXVtrXSAqIEIuTVtrXVtqXTsKICAgICAgICAgICAgICAgIHN1bSAlPSBtb2Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQy5NW2ldW2pdID0gc3VtOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBDOwp9CgpNYXRyaXggcG93cG93KE1hdHJpeCBBLCBpbnQgeSkgewogICAgYXNzZXJ0KEEubiA9PSBBLm0pOwoKICAgIE1hdHJpeCByZXMgPSBJZGVudGl0eShBLm4pOwogICAgZm9yICg7IHkgPiAwOyB5ID4+PSAxKSB7CiAgICAgICAgaWYgKHkmMSkgcmVzID0gcmVzKkE7CiAgICAgICAgQSA9IEEqQTsKICAgIH0KICAgIHJldHVybiByZXM7Cn0KCgppbnQgcG93bW9kKGludCBhLCBpbnQgYikgewogICAgaW50IHJlcyA9IDE7CiAgICBmb3IgKDsgYiA+IDA7IGIgPj49IDEpIHsKICAgICAgICBpZiAoYiYxKSByZXMgPSAocmVzKmEpICUgbW9kOwogICAgICAgIGEgPSAoYSphKSAlIG1vZDsKICAgIH0KICAgIHJldHVybiByZXM7Cn0KCmNvbnN0IGludCBtYXhuID0gMTE7CmludCBuMSwgbSwgYXJyW21heG5dOwoKaW50IG4gPSAwOwoKaW50MzJfdCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgZmlsZWlvKCIiKTsKICAgIC8vIGZyZW9wZW4oImRlYnVnLnR4dCIsICJ3Iiwgc3RkZXJyKTsKCiAgICBjaW4gPj4gbjEgPj4gbTsKICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gRTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG4xOyBpKyspIHsKICAgICAgICBjaW4gPj4gYXJyW2ldOwogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgYXJyW2ldOyBqKyspIHsKICAgICAgICAgICAgRS5wdXNoX2JhY2soe24raiwgbitqKzF9KTsKICAgICAgICB9CiAgICAgICAgRS5wdXNoX2JhY2soe24rYXJyW2ldLCBuKzF9KTsKICAgICAgICBpZiAoaSA+IDEpIHsKICAgICAgICAgICAgRS5wdXNoX2JhY2soe24tYXJyW2ktMV0rMSwgbisxfSk7CiAgICAgICAgfQogICAgICAgIG4gKz0gYXJyW2ldOwogICAgfQoKICAgIE1hdHJpeCBDKG4sIG4pLCBBKDEsIG4pOyBBWzBdWzBdID0gMTsKICAgIGZvciAoYXV0byBlOiBFKSB7CiAgICAgICAgaW50IHUgPSBlLmZpcnN0IC0gMSwgdiA9IGUuc2Vjb25kIC0gMTsKICAgICAgICBDW3VdW3ZdKys7CiAgICB9CgogICAgQSA9IEEgKiBwb3dwb3coQywgbjEtMSkgKiBwb3dwb3coQywgbSk7CgogICAgY291dCA8PCBBWzBdW24tYXJyW24xXV07CgogICAgcmV0dXJuIDAgXiAwOwp9Cg==