#include <bits/stdc++.h>
#define all(x) (x).begin(),(x).end()
#define ll long long
#define M 1000000007
using namespace std;
int nxt(){
    int x;
    cin>>x;
    return x;
}
int aps(int x){
    if(x<0) x=-x;
    return x;
}
int main()
{
    int n, k;
    cin>>n>>k;
    vector<ll> a(n);
    generate(all(a), nxt);
    ll r=0;
    if(k==0){
        for(int i=0; i<n; i++){
            r=(r+a[i])%M;
        }
        cout<<r;
        return 0;
    }
    if(k==1){
        for(int i=0; i<n; i++){
            r=(r+((a[i]*(i+1))%M)*(n-i))%M;
        }
        cout<<r;
        return 0;
    }
    vector<int> b(n, 0), s(n+1, 0);
    vector< vector<int> > f(n, b);
    for(int i=1; i<=n; i++){
        s[i]=(s[i-1]+a[i-1])%M;
    }
    for(int i=0; i<n; i++){
        for(int j=i; j<n; j++){
            f[i][j]=(s[j+1]-s[i]+M)%M;
        }
    }
    for(int sloj=1; sloj<=k; sloj++){
        for(int j=0; j<n; j++){
            for(int i=j-1; i>=0; i--){
                f[i][j]=(f[i][j]+f[i+1][j]+f[i][j-1]-f[i+1][j-1]+M)%M;
                //cout<<i<<' '<<j<<endl;
            }
        }
    }
    cout<<f[0][n-1];
    return 0;
}