using System; using System.Linq; class AC { static void Main() { var (N, K) = Csin.Input(); var A = Console.ReadLine().Split().Select(long.Parse).ToArray(); const int MOD = (int)1e9 + 7; long modpow(long x, int n) { if (n == 0) return 1L; return n % 2 == 0 ? modpow((x * x) % MOD, n / 2) % MOD : (x * modpow(x, n - 1)) % MOD; } var comb = new long[N]; comb[0] = 1; for (var i = 1; i < N; i++) comb[i] = ((comb[i - 1] * (K + i)) % MOD * modpow(i, MOD - 2)) % MOD; long ans = 0; for (var i = 0; i < N; i++) { ans += ((comb[i] * comb[N - 1 - i]) % MOD * A[i]) % MOD; ans %= MOD; } Console.WriteLine(ans); } } static class Csin { public static string[] StrArray() => Console.ReadLine().Split(); public static string[] StrArray(char separator) => Console.ReadLine().Split(separator); private static T Conv(string value) => (T)Convert.ChangeType(value, typeof(T)); public static (T, U) ReadTuple(string[] input) => (Conv(input[0]), Conv(input[1])); public static (T, U, V) ReadTuple(string[] input) => (Conv(input[0]), Conv(input[1]), Conv(input[2])); public static (T, U, V, W) ReadTuple(string[] input) => (Conv(input[0]), Conv(input[1]), Conv(input[2]), Conv(input[3])); public static (T, U, V, W, X) ReadTuple(string[] input) => (Conv(input[0]), Conv(input[1]), Conv(input[2]), Conv(input[3]), Conv(input[4])); public static (T, U) Input() => ReadTuple(StrArray()); public static (T, U, V) Input() => ReadTuple(StrArray()); public static (T, U, V, W) Input() => ReadTuple(StrArray()); public static (T, U, V, W, X) Input() => ReadTuple(StrArray()); }