#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 150, S = 150 * 150, K = 150;
const int inf = (int)1e9;
int main() {
  int n, k, s;
  scanf("%d%d%d", &n, &k, &s);
  s += k * (k - 1) / 2;
  s = min(s, n * (n - 1) / 2);
  static int a[N];
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i]);
  }
  static int dp[S][2][K], added[S][2][K];
  for (int i = 0; i < S; ++i) {
    for (int j = 0; j < 2; ++j) {
      for (int k = 0; k < K; ++k) {
        dp[i][j][k] = inf;
      }
    }
  }
  queue<pair<int, int> > q[N];
  q[0].push({0, 0});
  q[0].push({0, 1});
  dp[0][0][0] = 0;
  dp[0][0][1] = a[0];
  for (int i = 0; i < n - 1; ++i) {
    while (!q[i % 2].empty()) {
      int cur_s = q[i % 2].front().first, cur_k = q[i % 2].front().second;
      added[cur_s][i % 2][cur_k] = 0;
      q[i % 2].pop();
      if (dp[cur_s][(i + 1) % 2][cur_k] > dp[cur_s][i % 2][cur_k]) {
        dp[cur_s][(i + 1) % 2][cur_k] = dp[cur_s][i % 2][cur_k];
        if (!added[cur_s][(i + 1) % 2][cur_k]) {
          q[(i + 1) % 2].push({cur_s, cur_k});
          added[cur_s][(i + 1) % 2][cur_k] = 1;
        }
      }
      if (cur_s + i + 1 <= s && cur_k <= k) {
        if (dp[cur_s + i + 1][(i + 1) % 2][cur_k + 1] >
            dp[cur_s][i % 2][cur_k] + a[i + 1]) {
          dp[cur_s + i + 1][(i + 1) % 2][cur_k + 1] =
              dp[cur_s][i % 2][cur_k] + a[i + 1];
          if (!added[cur_s + i + 1][(i + 1) % 2][cur_k + 1]) {
            q[(i + 1) % 2].push({cur_s + i + 1, cur_k + 1});
            added[cur_s + i + 1][(i + 1) % 2][cur_k + 1] = 1;
          }
        }
      }
      dp[cur_s][i % 2][cur_k] = inf;
    }
  }
  int ans = inf;
  for (int i = 0; i <= s; ++i) {
    ans = min(ans, dp[i][(n - 1) % 2][k]);
  }
  printf("%d\n", ans);
  return 0;
}
