#include <bits/stdc++.h>
const long long INFLL = 1e18;
using namespace std;
const int MAXN = 2000;
int a[MAXN + 1], n, k, q;
bool check(int mn, int mx) {
  multiset<pair<int, int> > s;
  for (int i = 0; i < k; i++) {
    s.insert({a[i], i});
  }
  int nxt = k;
  int j = 0;
  for (int i = 0; i + k - 1 < n && j < q; i++) {
    if (s.size() < k) {
      break;
    }
    if (mn <= s.begin()->first && s.begin()->first <= mx) {
      s.erase(s.begin());
      --i;
      ++j;
    } else if (s.find({a[i], i}) != s.end()) {
      s.erase(s.find({a[i], i}));
    }
    if (nxt < n) {
      s.insert({a[nxt], nxt});
      ++nxt;
    }
  }
  return j == q;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> k >> q;
  vector<int> res;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    res.push_back(a[i]);
  }
  sort(res.begin(), res.end());
  res.resize(unique(res.begin(), res.end()) - res.begin());
  int ans = 1e9 + 100;
  for (int i = 0; i < (int)res.size(); i++) {
    int l = i - 1, r = (int)res.size();
    while (r > l + 1) {
      int mid = (l + r) / 2;
      if (check(res[i], res[mid])) {
        r = mid;
      } else {
        l = mid;
      }
    }
    if (r < (int)res.size() && check(res[i], res[r])) {
      ans = min(ans, res[r] - res[i]);
    }
  }
  cout << ans << "\n";
  return 0;
}
