#include <bits/stdc++.h>
using namespace std;
struct Grid {
  long long x, y, t;
};
struct Edge {
  long long to, cost;
};
struct Graph {
  vector<vector<Edge>> E;
  int V;
  const long long Inf = 1e18;
  const int MAX_V = 201010;
  vector<long long> d;
  Graph(int n) : E(n) {
    d.resize(MAX_V);
    E.resize(n);
    V = n;
  }
  void init() {
    for (int i = 0; i < MAX_V; i++) d[i] = Inf;
  }
  void add_edge(long long from, long long to, long long cost) {
    E[from].push_back({to, cost});
  }
};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  long long n, k, q;
  cin >> n >> k >> q;
  vector<long long> A(n);
  long long ans = 1e18;
  for (auto &a : A) cin >> a;
  for (int i = 0; i < n; i++) {
    vector<long long> ansvec;
    vector<long long> tmp;
    for (int j = 0; j < n; j++) {
      if (A[j] < A[i]) {
        if (tmp.size() >= k) {
          sort((tmp).begin(), (tmp).end());
          for (int ii = 0; ii < tmp.size() - k + 1; ii++)
            ansvec.push_back(tmp[ii]);
        }
        tmp.clear();
      } else {
        tmp.push_back(A[j]);
      }
    }
    if (tmp.size() >= k) {
      for (int j = 0; j < tmp.size() - k + 1; j++) ansvec.push_back(tmp[j]);
    }
    if (ansvec.size() >= q) {
      sort((ansvec).begin(), (ansvec).end());
      ans = min(ans, ansvec[q - 1] - ansvec[0]);
    }
  }
  cout << ans << endl;
  return 0;
}
