#include <bits/stdc++.h>
using ll = long long;
const ll MOD = 998244353;
const int INF = (ll)1e9 + 7;
const ll INFLL = (ll)1e18;
using namespace std;
template <class t>
using vvector = vector<vector<t>>;
template <class t>
using vvvector = vector<vector<vector<t>>>;
template <class t>
using priority_queuer = priority_queue<t, vector<t>, greater<t>>;
template <class t, class u>
bool chmax(t &a, u b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class t, class u>
bool chmin(t &a, u b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
ll modpow(ll x, ll b) {
  ll res = 1;
  while (b) {
    if (b & 1) res = res * x % MOD;
    x = x * x % MOD;
    b >>= 1;
  }
  return res;
}
ll modinv(ll x) { return modpow(x, MOD - 2); }
bool was_output = false;
template <class t>
void output(t a) {
  if (was_output) cout << " ";
  cout << a;
  was_output = true;
}
void outendl() {
  was_output = false;
  cout << endl;
}
ll in() {
  ll res;
  scanf("%lld", &res);
  return res;
}
template <class t>
istream &operator>>(istream &is, vector<t> &x) {
  for (auto &i : x) is >> i;
  return is;
}
template <class t, class u>
istream &operator>>(istream &is, pair<t, u> &x) {
  is >> x.first >> x.second;
  return is;
}
int main() {
  ll n = in();
  int k = in();
  int q = in();
  vector<ll> line(n);
  cin >> line;
  auto func = [&](int mins) {
    set<ll> s;
    vector<ll> del;
    for (auto &i : (line)) {
      if (i >= mins) {
        s.insert(i);
        if ((int)s.size() >= k) {
          del.push_back(*s.begin());
          s.erase(s.begin());
        }
      } else {
        s.clear();
      }
    }
    sort((del).begin(), (del).end());
    return (int)del.size() >= q ? del[q - 1] : -1;
  };
  vector<ll> sorted;
  int ans = INF;
  for (auto &i : (line)) {
    int d = func(i);
    if (d >= 0) {
      chmin(ans, d - i);
    }
  }
  cout << ans << endl;
  return 0;
}
