#include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair pii; typedef vector vi; typedef long long number; typedef vector vec; typedef vector matrix; ll mod_pow(ll x, ll p, ll MOD) { ll a = 1; while (p) { if (p%2) a = a*x%MOD; x = x*x%MOD; p/=2; } return a; } const ll MOD = 1e9+7; // O( n ) matrix iden(int n) { matrix A(n, vec(n)); for (int i = 0; i < n; ++i) A[i][i] = 1; return A; } // O( n^3 ) matrix mul(const matrix &A, const matrix &B) { matrix C(A.size(), vec(B[0].size())); for (int i = 0; i < (int)C.size(); ++i) for (int j = 0; j < (int)C[i].size(); ++j) for (int k = 0; k < (int)A[i].size(); ++k) { C[i][j] += A[i][k] * B[k][j]; C[i][j] %= MOD; } return C; } // O( n^3 log e ) matrix pow(const matrix &A, ll e) { if (e == 0) return iden(A.size()); if (e == 1) return A; if (e % 2 == 0) { matrix tmp = pow(A, e/2); return mul(tmp, tmp); } else { matrix tmp = pow(A, e-1); return mul(A, tmp); } } int A[111]; int main() { int N; ll C; cin >> N >> C; if (C == 1) { cout << 0 << endl; return 0; } for (int i = 0; i < N; i++) cin >> A[i]; matrix M(N, vec(N)); for (int i = 0; i < N; i++) { for (int j = 0; j <= i; j++) { M[i][j] = A[i]; } } M = pow(M, C); ll ans = 0; for (int i = 0; i < N; i++) ans += M[i][0]; for (int i = 0; i < N; i++) { ans -= mod_pow(A[i], C, MOD); } ans = ((ans%MOD)+MOD)%MOD; cout << ans << endl; return 0; }