#include <bits/stdc++.h>

using namespace std;

const int mod = 1000000007;

int n, k;
long long niz[200000];
long long br = 0;

long long binomniKoeficijent(int N, int K)
{
    if(K > N/2) K = N-K;
    double nn = N;
    double kk = K;
    double rez = 1;
    for(int i = 0; i < K; i++)
    {
        rez *= (nn-i)/(kk-i);
    }
    long long rezultat = round(rez);
    return rezultat;
}

void f()
{
    long long brojac = 0;
    for(int i = 0; i < n; i++)
    {
        brojac += niz[i] % mod;
        brojac %= mod;
    }
    cout << brojac;
    return;
}

void prviSubTask()
{
    long long brojac = 0;
    for(int i = 0; i < n; i++)
    {
        brojac += (((i+1)%mod)*((n-i)%mod)*(niz[i]%mod))%mod;
        brojac %= mod;
    }
    cout << brojac;
    return;
}

void drugiSubTask(int N, int K, int I, int J)
{
    if(K > 0)
    {
        for(int i = I; i < J; i++)
        {
            for(int j = i; j < J; j++)
            {
                drugiSubTask(N, K-1, i, j+1);
            }
        }
    }
    else
    {
        for(int i = I; i < J; i++)
        {
            br += niz[i] % mod;
            br %= mod;
        }
    }
}

void ostali()
{
    for(int i = 0; i < n; i++)
    {
        br += (((binomniKoeficijent(i+k, k)%mod)*(binomniKoeficijent(n-i+k-1, k)%mod)%mod)*(niz[i]%mod))%mod;
        br %= mod;
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> k;
    for(int i = 0; i < n; i++)
        cin >> niz[i];
    if(k == 0) f();
    else if(k == 1) prviSubTask();
    else if(n <= 5 && k <= 5)
    {
        drugiSubTask(n, k, 0, n);
        cout << br;
    }
    else
    {
        ostali();
        cout << br;
    }
    return 0;
}