#include <bits/stdc++.h>

using namespace std;

unsigned long long bres = 0;

void bruteresi(unsigned long long arr[],int poc, int kr, int k)
{
    if(k == 0)
        for(int i = poc; i<=kr; i++)
            bres += arr[i];
    else if(k == 1)
    {
        for(int i = 0; i<=kr-poc; i++)
            bres+= arr[i+poc] * (i+1) * (kr-poc+1-i);
    }
    else
    {
        for(int i = poc; i<=kr; i++)
        {
            for(int j = i; j<=kr; j++)
            {
                bruteresi(arr,i,j,k-1);
            }
        }
    }
}


void brute(unsigned long long arr[], int k, int N)
{
    for(int i = 0; i<N; i++)
    {
        for(int j = i; j<N; j++)
        {
            bruteresi(arr,i,j,k-1);
        }
    }
}


int main()
{
    int N,k;
    cin >> N >> k;
    unsigned long long arr[N];
    for(int i = 0; i<N; i++)
    {
        cin >> arr[i];
    }

    unsigned long long res = 0;

    if(k == 0)
    {
        for(int i = 0; i<N; i++)
            res+= arr[i];
    }
    else if(k == 1)
    {
        for(int i = 0; i<N; i++)
            res+= arr[i] * (i+1) * (N-i);
    }
    else
    {
        /*if(N == 2)
            for(int i = 0; i<N; i++)
                res+= (k+1)*arr[i];*/
        //else
        //{
            brute(arr,k,N);
            res = bres;
        //}
    }
    cout << res % 1000000007;

    return 0;
}