#include <bits/stdc++.h>
using namespace std;
long long MOD = 998244353;
long long bigMod(long long x, long long y) {
  if (y == 1) return x;
  long long res = bigMod(x, y / 2LL);
  res *= res;
  res %= MOD;
  if (y % 2) {
    res *= x;
    res %= MOD;
  }
  return res;
}
int n, k, x;
long long a[5005];
long long dp[2][5005];
void prepare(int idx) {
  for (int i = 0; i <= 5000; i++) dp[idx][i] = -1e15;
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> k >> x;
  for (int i = 1; i <= n; i++) cin >> a[i];
  prepare(0);
  bool bla = 0;
  for (int i = 1; i <= k; i++) {
    dp[bla][i] = a[i];
  }
  for (int i = 2; i <= x; i++) {
    bla = !bla;
    prepare(bla);
    int prel = max(1, i - k);
    int prer = i - 1;
    deque<pair<long long, int>> dq;
    for (int j = prel; j <= prer; j++) {
      while (!dq.empty() && dq.back().first < dp[!bla][j]) dq.pop_back();
      while (!dq.empty() && dq.front().second < prel) dq.pop_front();
      dq.push_back({dp[!bla][j], j});
    }
    for (int j = i; j <= min(n, i * k); j++) {
      int l = max(1, j - k);
      int r = j - 1;
      while (!dq.empty() && dq.back().first < dp[!bla][r]) dq.pop_back();
      while (!dq.empty() && dq.front().second < l) dq.pop_front();
      dq.push_back({dp[!bla][r], r});
      long long q = dq.front().first;
      dp[bla][j] = q + a[j];
    }
  }
  long long ans = -1e15;
  for (int i = n; i >= n - k + 1; i--) ans = max(ans, dp[bla][i]);
  if (ans < 0) ans = -1;
  cout << ans << endl;
  return 0;
}
