/*
TASK: seq
LANG: C
*/
#include <stdio.h>
#define maxN (1<<20)
#define maxK 11

typedef long long ll;

int list[maxN];
ll F[maxN][maxK];
int n,k;

int MIN(int a, int b)
{if (a<b) return a;
else return b;}

int main()
{
    int i,j;
    scanf("%d%d",&n,&k);
    for (i=1;i<=n;++i) scanf("%d",&list[i]);
    F[1][0] = list[1];
    for (i=2;i<=n;++i) {
        F[i][0] = F[i-1][0] + list[i];
        if (i-1<=k) F[i][i-1] = F[i][0];
        }
    F[3][1] = 2 * (list[1] + list[2] + list[3]);
    for (i=4;i<=n;++i) { 
        if (i%2 == 0)
           for (j=1;j<=MIN(i/2-1,k);++j) {
               F[i][j] = F[i-1][j-1] + F[i-1][j] + (i-j)*list[i];
               if (n-j-1 <= k) F[i][n-j-1] = F[i][j];
               }
        else {
             for (j=1;j<=MIN(i/2-1,k);++j) {
               F[i][j] = F[i-1][j-1] + F[i-1][j] + (i-j)*list[i];
               if (n-j-1 <= k) F[i][n-j-1] = F[i][j];
               }
             if (i/2 <= k) F[i][i/2] = list[i-1]*F[i-2][i/2-1];
             }
        }
    printf("%lld\n",F[n][k]);
    return 0;
}
