#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int x;
  scanf("%d", &x);
  return x;
}
const long double EPS = 1e-12;
const int INF = 1e9 + 10;
const long long LINF = 1000ll * 1000 * 1000 * 1000 * 1000 * 1000 + 100;
const int MS = 149 * 75 + 10;
const int MN = 150;
int n, k, s;
int arr[MN];
long long dp1[MN][MS], dp2[MN][MS], tmp[MN][MS];
void prep() {
  for (int i = 1; i < MN; ++i)
    for (int j = 0; j < MS; ++j) dp1[i][j] = tmp[i][j] = INF;
  for (int l = 0; l < k; ++l) {
    for (int i = 1; i <= k; ++i)
      for (int j = 0; j <= s; ++j) {
        dp1[i][j] = tmp[i][j];
        if (l < i - 1) continue;
        if (j) dp1[i][j] = min(dp1[i][j], dp1[i][j - 1]);
        if (l - i + 1 > j) continue;
        dp1[i][j] = min(dp1[i][j], arr[l] + tmp[i - 1][j - (l - i + 1)]);
      }
    for (int i = 0; i <= k; ++i)
      for (int j = 0; j <= s; ++j) tmp[i][j] = dp1[i][j];
  }
  memset(tmp, 0, sizeof tmp);
  for (int i = 1; i < MN; ++i)
    for (int j = 0; j < MS; ++j) dp2[i][j] = tmp[i][j] = INF;
  for (int l = n - 1; l >= k; --l) {
    for (int i = 1; i <= min(k, n - k); ++i)
      for (int j = 0; j <= s; ++j) {
        dp2[i][j] = tmp[i][j];
        if (l - k + i > j) continue;
        dp2[i][j] = min(dp2[i][j], arr[l] + tmp[i - 1][j - (l - k + i)]);
      }
    for (int i = 0; i <= k; ++i)
      for (int j = 0; j <= s; ++j) tmp[i][j] = dp2[i][j];
  }
}
void input() {
  cin >> n >> k >> s;
  for (int i = 0; i < n; ++i) cin >> arr[i];
  if (s >= n * (n - 1) / 2 || k == n) {
    sort(arr, arr + n);
    long long sm = 0;
    for (int i = 0; i < k; ++i) sm += arr[i];
    cout << sm << '\n';
    exit(0);
  }
  prep();
}
int main() {
  ios_base ::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  input();
  long long mn = 0;
  for (int i = 0; i < k; ++i) mn += arr[i];
  for (int i = 0; i <= k; ++i) {
    for (int j = 0; j <= s; ++j) {
      if (k - i <= n - k) mn = min(mn, dp1[i][j] + dp2[k - i][s - j]);
    }
  }
  cout << mn << '\n';
  return 0;
}
