#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=200050;
const int M=2050;
const int mod=1e9+7;
void ckadd(ll& a,ll b){a+=b;if(a>=mod)a%=mod;}
int n,k;
ll a[N],cnt[N],pw[M][M];
void Calc(){
    for(int i=1;i<M;i++){
        pw[0][i]=1;
    }
    for(int i=1;i<M;i++){
        for(int j=1;j<M;j++){
            ckadd(pw[i][j],pw[i-1][j]);
            ckadd(pw[i][j],pw[i][j-1]);
            //pw[i][j]=pw[i-1][j]+pw[i][j-1];
        }
    }
    /*for(int i=0;i<=k;i++){
        for(int j=1;j<=n;j++){
            printf("%lld ",pw[i][j]);
        }
        printf("\n");
    }*/
}
void PrintAll(int l,int r,int k){

    if(k==0){
        for(int i=l;i<=r;i++)cnt[i]++;
        //printf("%i %i %i\n",l,r,k);
        return;
    }
    for(int i=l;i<=r;i++)for(int j=i;j<=r;j++)PrintAll(i,j,k-1);
}
int main(){
    scanf("%i %i",&n,&k);
    for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
    Calc();
    //PrintAll(1,n,k);
    ll pref[M];
    for(int i=1;i<M;i++){
        pref[i]=0;
        for(int j=1;j<=i;j++){
            pref[i]+=pw[k][j];
        }
    }
    ll ans=0,tmp=0;
    for(int i=1;i<=n;i++){
        tmp+=pw[k][n-i+1];
        ll r=tmp-pref[i-1];
        ckadd(ans,r*a[i]);
        //printf("%lld ",tmp-pref[i-1]);
        //tmp-=pref[i];
    }
    printf("%lld",ans);
    return 0;
}