func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long maxn = 2e5 + 10;   const long long mod = 1e9 + 7;   long long ans;   long long n, k;   long long a[maxn];   long long z;   long long inv[maxn];   long long fact[maxn];   long long pashm[maxn];   void in();   void solve();   long long pwr(long long, long long);   long long oof(long long, long long);   long long C(long long, long long);   void out();   int main() {     ios::sync_with_stdio(false);     cout.tie(0);     cin.tie(0);     in();     solve();     out();   }   void in() {     cin >> n >> k;     for (long long i = 0; i < n; i++) cin >> a[i];   }   void solve() {     fact[0] = 1;     for (long long i = 1; i < maxn; i++) fact[i] = fact[i - 1] * i % mod;     inv[maxn - 1] = pwr(fact[maxn - 1], -1);     for (long long i = maxn - 2; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % mod;     long long sum = 0;     for (long long i = 0; i < n; i++) sum = (sum + a[i]) % mod;     z = (oof(n, k) + oof(n - 1, k) * (n - 1) % mod) % mod;     ans = (ans + sum * z % mod) % mod;   }   long long oof(long long a, long long b) {     long long z = 0;     for (long long i = b; i >= 0; i--) {       long long Z = 1;       if ((b - i) % 2) Z *= -1;       z = (z + Z * pwr(i, a) % mod * C(b, i) % mod + mod) % mod;     }     z *= inv[b];     return z % mod;   }   long long pwr(long long a, long long b) {     if (b < 0) return pwr(a, b + mod - 1);     if (b == 0) return 1;     long long c = pwr(a, b / 2);     if (b % 2) return c * c % mod * a % mod;     return c * c % mod;   }   long long C(long long n, long long k) {     if (n == k) return 1;     if (k > n) return 0;     return fact[n] * inv[k] % mod * inv[n - k] % mod;   }   void out() { cout << ans; }   