#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define i_7 1000000007 #define i_5 1000000005 ll mod(ll a){ ll c=a%i_7; if(c>=0)return c; else return c+i_7; } typedef pair i_i; typedef pair l_l; #define inf 100000000/*10^8*/ #define rep(i,l,r) for(int i=l;i<=r;i++) const double EPS=1E-8; //////////////////////////////////////// typedef vector vec; typedef vector mat; mat mul(mat a,mat b){/*行列aと行列bの積*/ mat c(a.size(),vec(b[0].size())); for(int i=0;i0){ if(n&1)b=mul(b,a); a=mul(a,a); n>>=1; } return b; } ////////////////////////////////////////// void print(mat q){ cout<>n>>k; ll a[n+1];rep(i,0,n-1)cin>>a[i]; if(k<=1000000){ ll b[k]; ll all=0,sum=0; rep(i,0,n-1){ b[i]=a[i]; all=mod(all+b[i]); sum=mod(sum+b[i]); /*cout<=1;i--)a[i]=a[i-1]; mat x(n,vec(n)); rep(i,0,n-1){ rep(j,0,n-1){ if(i==0){ x[i][j]=1; }else{ if(i==j+1)x[i][j]=1; else x[i][j]=0; } } } mat xx(n,vec(1)); rep(i,0,n-1)xx[i][0]=a[n-i]; xx=mul(pow(x,k-n),xx); cout<