#include <bits/stdc++.h>
inline int read() {
  static char ch;
  bool sgn = false;
  while (ch = getchar(), ch < '0' || ch > '9')
    if (ch == '-') sgn = true;
  int res = ch - 48;
  while (ch = getchar(), ch >= '0' && ch <= '9') res = res * 10 + ch - 48;
  return sgn ? -res : res;
}
const int N = 151;
long long f[2][N][N * N / 2];
int n, m, S, q[N];
int main() {
  n = read();
  m = read();
  S = read();
  S = std::min(S, n * (n - 1) / 2);
  for (int i = (1); i <= (n); ++i) q[i] = read();
  memset(f, -1, sizeof(f));
  int cur = 0, nxt = 1;
  long long ans = 0x7fffffffffffffffll;
  f[cur][0][0] = 0;
  for (int i = (1); i <= (n); ++i) {
    for (int j = (0); j <= (m); ++j)
      for (int k = (0); k <= (S); ++k)
        if (f[cur][j][k] != -1) {
          if (k + (i - j - 1) <= S && j != m)
            if (f[nxt][j + 1][k + i - j - 1] == -1 ||
                f[cur][j][k] + q[i] < f[nxt][j + 1][k + i - j - 1])
              f[nxt][j + 1][k + i - j - 1] = f[cur][j][k] + q[i];
          if (f[nxt][j][k] == -1 || f[nxt][j][k] > f[cur][j][k])
            f[nxt][j][k] = f[cur][j][k];
        }
    for (int j = (0); j <= (m); ++j)
      for (int k = (0); k <= (S); ++k) f[cur][j][k] = -1;
    std::swap(cur, nxt);
  }
  for (int i = (0); i <= (S); ++i)
    if (f[cur][m][i] != -1) ans = std::min(ans, f[cur][m][i]);
  std::cout << ans;
  return 0;
}
