#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1280000000")
using namespace std;
void solve();
void precalc();
clock_t start;
int testNumber = 1;
bool todo = true;
int main() {
  start = clock();
  int t = 1;
  cout.sync_with_stdio(0);
  cin.tie(0);
  precalc();
  cout.precision(10);
  cout << fixed;
  int testNum = 1;
  while (t--) {
    solve();
    ++testNumber;
  }
  return 0;
}
int binpow(int q, int w, int mod) {
  if (!w) return 1 % mod;
  if (w & 1) return q * 1LL * binpow(q, w - 1, mod) % mod;
  return binpow(q * 1LL * q % mod, w / 2, mod);
}
void precalc() {}
int gcd(int q, int w) {
  while (w) {
    q %= w;
    swap(q, w);
  }
  return q;
}
long long dpLeft[2][150][150 * 150];
long long dpRight[2][150][150 * 150];
void relaxMax(long long& dest, long long val) {
  if (val == -1) {
    return;
  }
  if (dest == -1) {
    dest = val;
  } else {
    dest = max(dest, val);
  }
}
void relaxMin(long long& dest, long long val) {
  if (val == -1) {
    return;
  }
  if (dest == -1) {
    dest = val;
  } else {
    dest = min(dest, val);
  }
}
void solve() {
  long long n, k, s;
  cin >> n >> k >> s;
  vector<long long> q(n);
  long long sum_first = 0;
  for (long long i = 0; i < n; ++i) {
    cin >> q[i];
    if (i < k) {
      sum_first += q[i];
    }
  }
  long long w = 0;
  memset(dpLeft[w], -1, sizeof dpLeft[w]);
  dpLeft[w][0][0] = 0;
  for (long long pos = k - 1; pos >= 0; --pos) {
    memset(dpLeft[w ^ 1], -1, sizeof dpLeft[w ^ 1]);
    long long dist = k - 1 - pos;
    for (long long take = 0; take <= dist; ++take) {
      for (long long inv = 0; inv <= dist * take; ++inv) {
        if (dpLeft[w][take][inv] == -1) {
          continue;
        }
        relaxMax(dpLeft[w ^ 1][take][inv], dpLeft[w][take][inv]);
        relaxMax(dpLeft[w ^ 1][take + 1][inv + dist],
                 dpLeft[w][take][inv] + q[pos]);
      }
    }
    w ^= 1;
  }
  for (long long take = 0; take <= k; ++take) {
    for (long long inv = 0; inv < k * take; ++inv) {
      relaxMax(dpLeft[w][take][inv + 1], dpLeft[w][take][inv]);
    }
  }
  long long par = 0;
  memset(dpRight[par], -1, sizeof dpRight[par]);
  dpRight[par][0][0] = 0;
  for (long long pos = k; pos < n; ++pos) {
    memset(dpRight[par ^ 1], -1, sizeof dpRight[par ^ 1]);
    long long dist = pos - k;
    for (long long take = 0; take <= dist; ++take) {
      for (long long inv = 0; inv <= dist * take; ++inv) {
        if (dpRight[par][take][inv] == -1) {
          continue;
        }
        relaxMin(dpRight[par ^ 1][take][inv], dpRight[par][take][inv]);
        relaxMin(dpRight[par ^ 1][take + 1][inv + dist],
                 dpRight[par][take][inv] + q[pos]);
      }
    }
    par ^= 1;
  }
  for (long long take = 0; take <= n - k; ++take) {
    for (long long inv = 0; inv < (n - k) * take; ++inv) {
      relaxMin(dpRight[par][take][inv + 1], dpRight[par][take][inv]);
    }
  }
  long long ans = 0;
  for (long long take = 0; take <= k; ++take) {
    for (long long inv = 0; inv <= k * take; ++inv) {
      long long inv1 = min(s - take - inv, (n - k) * take);
      if (inv1 >= 0 && dpLeft[w][take][inv] != -1 &&
          dpRight[par][take][inv1] != -1) {
        ans = min(ans, -dpLeft[w][take][inv] + dpRight[par][take][inv1]);
      }
    }
  }
  ans += sum_first;
  cout << ans << "\n";
}
