//f[i][j]表示前i种材料,锅里材料共有j种时耐久值
//f[i][j]=max{f[i-1][j-1...j+s-1]}+a[i]*j;
#include<iostream>
#include<cstring>
using namespace std;
int n,w,s,a[5505],q1[5505],head,tail;
long long f[5505][5505],ans;
int main() {
cin>>n>>w>>s;
for(int i=1;i<=n;i++) cin>>a[i];
memset(f,-127,sizeof(f));
f[1][1]=a[1];
for(int i=2;i<=n;i++) {
int j=w<i?w:i;
tail=0;head=1;q1[++tail]=j;
for(;j>0;j--) {
while(f[i-1][j-1]>f[i-1][q1[tail]]&&tail>=head) tail--;
q1[++tail]=j-1;
while(q1[head]-q1[tail]>s&&head<=tail) head++;
f[i][j]=f[i-1][q1[head]]+a[i]*j;
}
}
ans=f[n][1];
for(int i=2;i<=w;i++) ans=max(ans,f[n][i]);
cout<<ans<<endl;
return 0;
}