#include <bits/stdc++.h>

using namespace std;

int N, M, K;
int A[100001];
long long dp[301][100001];

struct smax
{
    long long q[100001];
    int w[100001];
    int h, t;
    void clear()
    {
        h=t=0;
    }
    void append(long long a, int b)
    {
        while(h<t && q[t-1]<=a)
            t--;
        w[t]=b;
        q[t++]=a;
    }
    void filter(int x)
    {
        while(h<t && w[h]<x)
            h++;
    }
    long long getmax()
    {
        return q[h];
    }
} dq;

int main()
{
    scanf("%d%d%d", &N, &M, &K);
    for(int i=1; i<=N; i++)
        scanf("%d", A+i), dp[1][i]=A[i];
    for(int i=2; i<=K; i++)
    {
        dq.clear();
        dq.append(dp[i-1][i-1], i-1);
        for(int j=i; j<=N; j++)
        {
            dq.filter(j-M);
            dp[i][j]=dq.getmax()+1LL*A[j]*i;
            dq.append(dp[i-1][j], j);
        }
    }
    printf("%lld\n", *max_element(dp[K]+1, dp[K]+1+N));
    return 0;
}
