#include <bits/stdc++.h>
using namespace std;
const int N = 5005;
long long dp[N][N], a[N];
deque<int> que[N];
int main() {
  int n, k, x;
  scanf("%d%d%d", &n, &k, &x);
  memset(dp, 0, sizeof(dp));
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  dp[1][1] = a[1];
  que[1].push_back(1);
  long long ans = x == 1 && k >= n ? dp[1][x] : 0;
  for (int i = 2; i <= n; i++) {
    if (i - k < 1) dp[i][1] = a[i];
    bool flag = false;
    if (x == 1) {
      if (i + k - 1 >= n) flag = true;
    }
    for (int j = 2; j <= min(x, i); j++) {
      if (dp[*que[j - 1].begin()][j - 1] == 0) continue;
      dp[i][j] = max(dp[i][j], dp[*que[j - 1].begin()][j - 1] + a[i]);
      if (j == x) {
        if (i + k - 1 >= n) flag = true;
      }
    }
    for (int j = 1; j <= min(x, i); j++) {
      while (!que[j].empty() && dp[*que[j].rbegin()][j] <= dp[i][j]) {
        que[j].pop_back();
      }
      que[j].push_back(i);
      if (*que[j].begin() < i - k + 1) que[j].pop_front();
    }
    if (flag) ans = max(ans, dp[i][x]);
  }
  if (ans == 0) ans = -1;
  printf("%lld\n", ans);
}
