1
10 2 20
8 5 2 4 10 3 9 7 1 6
5 10
3 17
6 31
3 46
10 42
7 19
9 36
7 3
3 13
8 32
10 25
9 34
10 34
6 33
3 9
2 17
4 5
10 44
9 15
5 40
 1
47 1 47
40 45 19 10 44 33 47 12 2 46 16 23 3 14 21 28 31 42 22 18 35 38 24 25 36 32 4 34 5 20 37 39 6 9 1 7 29 8 17 27 30 11 13 41 15 43 26
39 25
41 24
32 30
10 6
30 13
24 35
41 17
31 31
9 44
21 8
43 23
8 5
29 13
8 4
47 20
22 10
37 27
17 39
43 23
14 42
46 19
43 24
30 31
24 35
31 13
31 32
20 9
3 2
20 9
14 7
7 3
21 36
32 30
47 19
11 43
6 2
31 31
26 12
47 20
2 1
40 24
16 40
45 21
36 28
36 28
17 38
30 31
 1
1 1 4
1
1 1
1 2
1 3
1 4
 1
10 1 1
10 4 6 5 7 9 8 1 3 2
6 10

3
2
7
10
6
7
7
7
5
1
6
6
1
9
4
4
4
1
1
3
 27
27
37
16
20
24
11
20
46
35
11
2
34
47
26
24
7
28
11
3
26
13
37
24
37
37
22
10
22
14
47
38
37
43
23
33
20
4
26
19
30
21
43
1
1
42
37
 1
-1
-1
-1
 9

#include <bits/stdc++.h>
using namespace std;
pair<long long, long long> pp;
vector<pair<long long, long long> > vb[30005], vs[30005];
long long p[30005];
long long c[30005][10], s[30005][10];
long long bg[30005][10], sm[30005][10], sumb[30005][10], sums[30005][10];
long long y, wtf;
long long n, k, x, z, now;
void go(long long l) {
  if (now == 0 || l > x || y == 0) return;
  while (y <= 0)
    ;
  long long lp = l - 1, r = n - 1, mid;
  if (y > sums[n - 1][now] - sums[lp][now]) {
    y -= (sums[n - 1][now] - sums[lp][now]);
    y--;
    if (y == 0) return;
    while (l != r) {
      mid = (l + r) / 2;
      if (sumb[n - 1][now] - sumb[mid][now] >= y)
        l = mid + 1;
      else
        r = mid;
    }
    y -= sumb[n - 1][now] - sumb[l][now];
    for (long long i = 0; i < vb[l].size(); i++) {
      if (now < vb[l][i].second - l) continue;
      if (y <= s[n - vb[l][i].second][now - (vb[l][i].second - l)]) {
        if ((l <= x) && (vb[l][i].second >= x)) {
          z = p[vb[l][i].second - (x - l)];
        }
        now -= (vb[l][i].second - l);
        go(vb[l][i].second + 1);
        return;
      } else
        y -= s[n - vb[l][i].second][now - (vb[l][i].second - l)];
    }
  } else {
    while (l != r) {
      mid = (l + r) / 2;
      if ((sums[mid][now] - sums[lp][now]) >= y)
        r = mid;
      else
        l = mid + 1;
    }
    y -= sums[l - 1][now] - sums[lp][now];
    for (long long i = 0; i < vs[l].size(); i++) {
      if (now < vs[l][i].second - l) continue;
      if (y <= s[n - vs[l][i].second][now - (vs[l][i].second - l)]) {
        if ((l <= x) && (vs[l][i].second >= x)) {
          z = p[vs[l][i].second - (x - l)];
        }
        now -= (vs[l][i].second - l);
        go(vs[l][i].second + 1);
        return;
      } else
        y -= s[n - vs[l][i].second][now - (vs[l][i].second - l)];
    }
  }
}
signed main() {
  c[1][0] = c[0][0] = 1;
  for (long long j = 0; j <= 4; j++) s[1][j] = s[0][j] = 1;
  for (long long i = 2; i <= 30000; i++) {
    c[i][0] = s[i][0] = 1;
    for (long long j = 1; j <= 4; j++) {
      c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
      s[i][j] = s[i][j - 1] + c[i][j];
    }
  }
  long long t, q;
  scanf("%lld", &t);
  while (t--) {
    scanf("%lld%lld%lld", &n, &k, &q);
    for (long long i = 1; i <= n; i++) scanf("%lld", &p[i]);
    for (long long i = 1; i < n; i++) {
      for (long long j = 1; j <= k; j++) bg[i][j] = sm[i][j] = 0;
      for (long long j = i + 1; j <= n && j - i <= k; j++) {
        pp.first = p[j];
        pp.second = j;
        if (p[j] < p[i]) {
          vs[i].push_back(pp);
          for (long long l = j - i; l <= k; l++)
            sm[i][l] += s[n - j][l - (j - i)];
        } else {
          vb[i].push_back(pp);
          for (long long l = j - i; l <= k; l++)
            bg[i][l] += s[n - j][l - (j - i)];
        }
      }
      sort(vs[i].begin(), vs[i].end());
      sort(vb[i].begin(), vb[i].end());
      for (long long j = 1; j <= k; j++) {
        sumb[i][j] = sumb[i - 1][j] + bg[i][j];
        sums[i][j] = sums[i - 1][j] + sm[i][j];
      }
    }
    wtf = sumb[n - 1][k] + 1 + sums[n - 1][k];
    while (q--) {
      scanf("%lld%lld", &x, &y);
      if (y > wtf)
        z = -1;
      else {
        z = p[x];
        now = k;
        go(1);
      }
      printf("%lld\n", z);
    }
  }
  return 0;
}
