#include <bits/stdc++.h>
#pragma GCC optimize("O3")
template <typename T>
bool uax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
bool uin(T& a, T b) {
  if (b < a) {
    a = b;
    return true;
  }
  return false;
}
using namespace std;
const int inf = 1e9 + 500500;
void solve_e() {
  int n, k, q;
  cin >> n >> k >> q;
  vector<int> a(n);
  for (int i = 0; i < (int)(n); ++i) cin >> a[i];
  int ans = inf;
  vector<int> b(a);
  sort((b).begin(), (b).end());
  b.erase(unique((b).begin(), (b).end()), b.end());
  for (int L : b) {
    vector<int> t, z;
    for (int x : a) {
      if (x < L) {
        if (t.size() >= k) {
          sort((t).begin(), (t).end());
          for (int j = 0; j < (int)(t.size() - k + 1); ++j) z.push_back(t[j]);
          t.clear();
        }
      } else
        t.push_back(x);
    }
    if (t.size() >= k) {
      sort((t).begin(), (t).end());
      for (int j = 0; j < (int)(t.size() - k + 1); ++j) z.push_back(t[j]);
      t.clear();
    }
    if (z.size() >= q) {
      sort((t).begin(), (t).end());
      uin(ans, t[q - 1] - t[0]);
    }
  }
  cout << ans << endl;
}
int main() {
  solve_e();
  return 0;
}
