using System;

namespace BUG
{
    class Program
    {
        static void Main(string[] args)
        {
            var ulaz1 = Console.ReadLine().Split();
            int N = int.Parse(ulaz1[0]);
            int k = int.Parse(ulaz1[1]);
            var ulaz2 = Console.ReadLine().Split();
            int[] A = new int[N];
            int mod = 1000000007;
            for (int i = 0; i < N; i++)
            {
                A[i] = int.Parse(ulaz2[i]);
            }
            int izlaz = 0;
            if (k == 0)
            {
                for (int i = 0; i < N; i++)
                {
                    izlaz += A[i] % mod;
                }
            }
           /* else if (k == 1)
            {
                if (N%2 == 0)
                {
                    int brojac = 1;
                    for (int i = N; i > N/2; i--)
                    {
                        izlaz += (i * brojac * (A[brojac - 1] + A[N])) % mod;
                        brojac++;
                    }
                }
                else
                {
                    int brojac = 1;
                    for (int i = N; i > N / 2 + 1; i--)
                    {
                        izlaz += (i * brojac * (A[brojac - 1] + A[i-1])) % mod;
                        brojac++;
                    }
                    izlaz += ((N/2+1)*(N/2+1)*A[N / 2]) % mod;
                }
            }*/
            else
            {
                izlaz = NadjiIzlaz(N, A, k);
            }
            Console.WriteLine(izlaz);
        }
        static int NadjiIzlaz (int brojClanova, int[] niz, int k)
        {
            int izlaz = 0;
            int mod = 1000000007;
            if (k == 1)
            {
                if (brojClanova % 2 == 0)
                {
                    int brojac = 1;
                    for (int i = brojClanova; i > brojClanova / 2; i--)
                    {
                        izlaz += (i * brojac * (niz[brojac - 1] + niz[i-1])) % mod;
                        brojac++;
                    }
                }
                else
                {
                    int brojac = 1;
                    for (int i = brojClanova; i > brojClanova / 2 + 1; i--)
                    {
                        izlaz += (i * brojac * (niz[brojac - 1] + niz[i-1])) % mod;
                        brojac++;
                    }
                    izlaz += ((brojClanova / 2+1)*(brojClanova / 2+1)* niz[brojClanova / 2]) % mod;
                }
                return izlaz;
            }
            else
            {
                int brojElemenata = 1;
                for (int i = 0; i < brojClanova; i++)
                {
                    for (int j = i; j < brojClanova; j++)
                    {
                        int[] noviNiz = new int[brojElemenata];
                        for (int l = 0; l < noviNiz.Length; l++)
                        {
                            noviNiz[l] = niz[l+i];
                            izlaz += NadjiIzlaz(noviNiz.Length, noviNiz, k - 1);
                        }
                        brojElemenata++;
                    }
                    brojElemenata = 1;
                }
                return izlaz;
            }
        }
    }
}