#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(a) a.begin(), a.end()
#define ff(i,a,b) for(int i=a;i<=b;i++)
#define fb(i,b,a) for(int i=b;i>=a;i--)

using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 100005;
const int inf = 1e9 + 5;
const int mod = 1e9 + 7;

int n, k;
ll niz[maxn];

ll add(ll a, ll b){
    return (a + b) % mod;
}
ll mul(ll a, ll b){
    return (a * b) % mod;
}
ll power(ll a, ll b){
    if(!b)return 1;
    ll pola = power(a, b / 2);
    pola = mul(pola, pola);
    if(b % 2)pola = mul(pola, a);
    return pola;
}
ll inv(ll a){
    return power(a, mod - 2);
}


void resi(){
    ll zbir = 0ll;
    ff(i,1,n)zbir = add(zbir, niz[i]);
    cout << zbir << endl;
    exit(0);
}

void resi1(){
    ll zbir = 0ll;
    ff(i,1,n)zbir = add(zbir, mul(niz[i], mul((ll)i, (ll)(n - i + 1))));
    cout << zbir << endl;
    exit(0);
}

//ll calc(vector<ll> a, int g){
//    if(g == 0){
//        ll zbir = 0ll;
//        for(auto c : a)zbir = add(zbir, c);
//        return zbir;
//    }
//    ll zbir = 0;
//    int len = a.size();
//    ff(i,0,len - 1){
//        vector<ll> b;
//        ff(j,i,len - 1){
//            b.pb(a[j]);
//            zbir = add(zbir, calc(b, g - 1));
//        }
//    }
//    return zbir;
//}
//
//void resi2(){
//    vector<ll> a;
//    ff(i,1,n)a.pb(niz[i]);
//    ll rez = calc(a, k);
//    cout << rez << endl;
//    exit(0);
//}

ll kol[305][305]; // (i, j) koliko se puta pojavljivao u proslom koraku
ll pomkol[305][305];
ll pref[305][305];
ll zbir[305][305];
void resi3(){
    ff(i,1,n){
        ff(j,i,n)kol[i][j] = 1ll;
    }
    ff(i,1,n){
        ff(j,1,i)pref[i][j] = add(pref[i][j - 1], kol[j][i]);
    }
    ff(i,1,n){
        fb(j,i,1)zbir[i][j] = add(zbir[i][j + 1], niz[j]);
    }
//    ff(i,1,n){
//        ff(j,1,i)cout << zbir[i][j] << " ";
//        cout << endl;
//    }
    ff(a,1,k){
        ff(i,1,n){
            fb(j,n,i){
//                ff(x,1,n){
//                    ff(y,x,n){
//                        if(x <= i && y >= j)kol[a][i][j] += kol[a - 1][x][y];
//                    }
//                }
                pomkol[i][j] = add(kol[i][j], pomkol[i][j + 1]);
//                ff(x,1,i - 1){
//                    kol[a][i][j] += kol[a - 1][x][j];
//                }
                pomkol[i][j] = add(pomkol[i][j], pref[j][i - 1]);
            }
        }
        // meni je desna granica stalna
        ff(i,1,n){
            ff(j,1,i){
                pref[i][j] = add(pref[i][j - 1], pomkol[j][i]);
                kol[j][i] = pomkol[j][i];
            }
        }
//        ff(i,1,n){
//            fb(j,n,i)kol[i][j] = pomkol[i][j];
//        }
//        ff(i,1,n){
//            ff(j,i,n){
//                cout << "i & j: " << i << " " << j << endl;
//                cout << pomkol[a][i][j] << endl;
//                cout << endl;
//            }
//        }
//        cout << "-------------------------------------------" << endl;
    }
    ff(i,1,n){
        fb(j,n,i)kol[i][j] = pomkol[i][j];
    }
//    ff(i,1,n){
//        ff(j,i,n){
//            cout << "i & j: " << i << " " << j << endl;
//            cout << pomkol[i][j] << endl;
//            cout << endl;
//        }
//    }
    ll rez = 0;
    ff(i,1,n){
        fb(j,i,1)rez = add(rez, mul(kol[i][j], zbir[i][j]));
    }
    cout << rez << endl;
    exit(0);
}

//int sta[2005][2005];
//int suma[2005][2005];
//void resi4(){
//    sta[1][n] = 1;
//    k += 1;
//    ff(i,1,n){
//        fb(j,n,i){
//            if(i == 1 && j == n)continue;
//            if(j - i + 1 == n - 1)sta[i][j] = k;
//            else{
//                ff(x,j + 1, n)sta[i][j] += sta[i][x];
//                sta[i][j] -= k;
//
////                cout << "i & j: " << i << " " << j << endl;
////                cout << "odz: " << odz << endl;
////                cout << "ima: " << ima << endl;
////                cout << endl;
//            }
//        }
//    }
//    ff(i,1,n){
//        ff(j,i,n){
//            cout << "i & j: " << i << " " << j << endl;
//            cout << sta[i][j] << endl;
//            cout << endl;
//        }
//    }
//    exit(0);
//}

int main()
{
    ios::sync_with_stdio(false);
    cout.tie(nullptr);
    cin.tie(nullptr);
    cin >> n >> k;
    ff(i,1,n)cin >> niz[i];
    if(k == 0)resi();
    if(k == 1)resi1();
//    if(k <= 5)resi2();
    resi3(); // k <= 300
//    if(k <= 2000)resi4();
    return 0;
}