#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
const int MAXN = 150;
int d1[2][151][11180], d2[2][151][11180];
int n, k;
int s;
int a[151];
int cur1, cur2;
int pref[151];
int lim[151];
int ans = ((int)(1e9));
void solve() {
  scanf("%d%d%d", &n, &k, &s);
  s = min(s, (n * (n - 1)) >> 1);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    pref[i] = pref[i - 1] + a[i];
    lim[i] = ((i * (i - 1)) >> 1);
  }
  if (k == n) {
    printf("%d\n", pref[n]);
    return;
  }
  cur1 = 0;
  for (int i = 1; i <= k; i++) {
    cur1 = cur1 ^ 1;
    for (int c = 1; c <= i; c++) {
      d1[cur1][c][0] = pref[i] - pref[i - c];
      for (int ss = 1; ss <= lim[i]; ss++) {
        int *d = (*(*(d1 + cur1) + c) + ss);
        (*d) = d1[cur1][c][ss - 1];
        if (i > 1 && c > 1) {
          (*d) = max(d1[cur1 ^ 1][c - 1][min(ss, lim[i - 1])] + a[i], (*d));
        }
        if (ss >= c && i > c) {
          (*d) = max((*d), d1[1 ^ cur1][c][min(ss - c, lim[i - 1])]);
        }
      }
    }
  }
  cur2 = 0;
  for (int i = n; i > k; i--) {
    cur2 = cur2 ^ 1;
    for (int c = 1; c <= n - i + 1; c++) {
      d2[cur2][c][0] = pref[i + c - 1] - pref[i - 1];
      for (int ss = 1; ss <= lim[n - i + 1]; ss++) {
        int *d = (*(*(d2 + cur2) + c) + ss);
        (*d) = d2[cur2][c][ss - 1];
        if (i < n && c > 1) {
          (*d) = min(d2[cur2 ^ 1][c - 1][min(ss, lim[n - i])] + a[i], (*d));
        }
        if (ss >= c && n - i >= c) {
          (*d) = min((*d), d2[1 ^ cur2][c][min(ss - c, lim[n - i])]);
        }
      }
    }
  }
  ans = pref[k];
  for (int i = 1; i <= min(k, n - k) && i * i <= s; i++) {
    int ss = s - i * i;
    for (int j = 0; j <= ss; j++) {
      ans = min(ans, pref[k] - d1[cur1][i][min(j, lim[k])] +
                         d2[cur2][i][min(ss - j, lim[n - k])]);
    }
  }
  printf("%d\n", ans);
}
int main() {
  srand(1337);
  solve();
  return 0;
}
