#include using namespace std; long mod=1e9+7; int N;long K; int A[10101]; long F[1<<20]; struct Mat{ long dat[31][31]; }; Mat mul(Mat A,Mat B) { Mat ret; for(int i=0;i<31;i++)for(int j=0;j<31;j++)ret.dat[i][j]=0; for(int i=0;i<31;i++)for(int j=0;j<31;j++) { for(int k=0;k<31;k++)ret.dat[i][j]+=A.dat[i][k]*B.dat[k][j]%mod; ret.dat[i][j]%=mod; } return ret; } Mat pow(Mat A,long k) { Mat E; for(int i=0;i<31;i++)for(int j=0;j<31;j++) { E.dat[i][j]=i==j?1:0; } while(k) { if(k&1)E=mul(E,A); k>>=1; A=mul(A,A); } return E; } main() { cin>>N>>K; for(int i=1;i<=N;i++)cin>>A[i]; if(K<1<<20) { long sum=0; for(int i=1;i<=N;i++) { sum+=F[i]=A[i]; } long now=sum; for(int i=N+1;i<=K;i++) { F[i]=now%=mod; (sum+=now)%=mod; now=(now+F[i]+mod-F[i-N])%mod; } cout<=0;i--) { t+=A[N-i]; s+=t*S.dat[0][i]; } cout<