#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int maxn = 2010, inf = 1e9 + 10;
int n, k, q, A[maxn], B[maxn], L[maxn], R[maxn];
bool cmp(int i, int j) { return A[i] < A[j]; }
struct Fenwick {
  int s[maxn];
  void del(int x) {
    x += 5;
    for (int i = x; i < maxn; i += i & -i) {
      s[i]--;
    }
  }
  int getr(int x) {
    int ans = x + 1;
    x += 5;
    for (int i = x; i > 0; i -= i & -i) {
      ans += s[i];
    }
    return ans;
  }
  int get(int l, int r) { return getr(r - 1) - getr(l); }
  void reset() { fill(s, s + maxn, 0); }
} fen;
int ans = inf;
int32_t main() {
  scanf("%d%d%d", &n, &k, &q);
  for (int i = 0; i < n; i++) {
    scanf("%d", A + i);
    B[i] = i;
  }
  sort(B, B + n, cmp);
  for (int j = 0; j < n; j++) {
    fen.reset();
    int id = B[j];
    vector<int> st;
    for (int i = 0; i < n; i++) {
      while (st.size() && A[st.back()] >= A[i]) {
        st.pop_back();
      }
      L[i] = st.size() ? st.back() : -1;
      if (B[i] < id) st.push_back(i);
    }
    st.clear();
    for (int i = n - 1; i >= 0; i--) {
      while (st.size() && A[st.back()] >= A[i]) {
        st.pop_back();
      }
      R[i] = st.size() ? st.back() : n;
      if (B[i] < id) st.push_back(i);
    }
    int cnt = 0;
    for (int o = j; o < n; o++) {
      int ii = B[o];
      if (fen.get(L[ii], R[ii]) >= k) {
        fen.del(ii);
        cnt++;
        if (cnt == q) {
          ans = min(ans, A[ii] - A[id]);
          break;
        }
      }
    }
  }
  printf("%d\n", ans);
}
