#include <bits/stdc++.h>
using namespace std;
int n, k, s;
int num[150];
int dfront[75 + 1][75 * 75 + 1];
int dend[75 + 1][75 * 75 + 1];
void update(int& d, int v) {
  if (d == 0) d = v;
  d = min(d, v);
}
void update2(int& d, int v) {
  if (d == 0) d = v;
  d = max(d, v);
}
int main() {
  scanf("%d %d %d", &n, &k, &s);
  int sum = 0;
  for (int i = 0; i < n; i++) scanf("%d", &num[i]);
  for (int i = 0; i < k; i++) sum += num[i];
  int tk = min(n - k, k);
  int sol = sum;
  int hk = max(n - k, k) * tk;
  for (int i = k; i < n; i++) {
    int gk = min(tk, i - k + 1);
    for (int g = gk; g >= 2; g--) {
      int hm = (i - k + 1) - g;
      for (int h = hm; h <= hk; h++) {
        if (dend[g - 1][h - hm] != 0) {
          update(dend[g][h], dend[g - 1][h - hm] + num[i]);
        }
      }
    }
    update(dend[1][i - k], num[i]);
  }
  for (int i = k - 1; i >= 0; i--) {
    int gk = min(tk, k - i);
    for (int g = gk; g >= 2; g--) {
      int hm = (k - i) - g;
      for (int h = hm; h <= hk; h++) {
        if (dfront[g - 1][h - hm] != 0) {
          update2(dfront[g][h], dfront[g - 1][h - hm] + num[i]);
        }
      }
    }
    update2(dfront[1][k - 1 - i], num[i]);
  }
  for (int t = 1; t <= tk; t++) {
    int rs = s - t * t;
    if (rs < 0) continue;
    for (int h = 1; h <= hk; h++) {
      if (dfront[t][h - 1] != 0) update2(dfront[t][h], dfront[t][h - 1]);
      if (dend[t][h - 1] != 0) update(dend[t][h], dend[t][h - 1]);
    }
    for (int h = 0; h <= hk; h++) {
      int hf = h;
      int he = min(rs - h, hk);
      if (he < 0) continue;
      if (dfront[t][hf] == 0 || dend[t][he] == 0) continue;
      int res = sum - dfront[t][hf] + dend[t][he];
      sol = min(sol, res);
    }
  }
  printf("%d\n", sol);
  return 0;
}
