#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fLL;
const double EPS = 1e-8;
const int MOD = 1000000007;
const int dy[] = {1, 0, -1, 0}, dx[] = {0, -1, 0, 1};
int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  int n, k, q;
  cin >> n >> k >> q;
  vector<int> a(n);
  for (int i = (0); i < (n); ++i) cin >> a[i];
  map<int, vector<int> > mp;
  for (int i = (0); i < (n); ++i) mp[a[i]].emplace_back(i);
  vector<int> sorted(a);
  sort((sorted).begin(), (sorted).end());
  int ans = sorted[q - 1] - sorted[0];
  vector<int> st{-1, n};
  int idx = 0, cnt = n - k + 1;
  for (auto &pr : mp) {
    idx += pr.second.size();
    for (int e : pr.second) st.emplace_back(e);
    sort((st).begin(), (st).end());
    vector<int> nozoku;
    int sz = st.size();
    for (int i = (0); i < (sz - 1); ++i) {
      vector<int> tmp;
      for (int j = (st[i] + 1); j < (st[i + 1]); ++j) tmp.emplace_back(a[j]);
      sort((tmp).begin(), (tmp).end());
      for (int j = (0); j < (st[i + 1] - st[i] - 1 - k + 1); ++j)
        nozoku.emplace_back(tmp[j]);
    }
    sort((nozoku).begin(), (nozoku).end());
    if (nozoku.size() < q) break;
    ans = min(ans, nozoku[q - 1] - sorted[0]);
  }
  cout << ans << '\n';
  return 0;
}
