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;
inline long long read() {
  long long x = 0, f = 1, c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  return f == 1 ? x : -x;
}
const long long N = 3e4 + 4;
long long n, c, Q, p[N], st[5][N], ed[5][N], C[N][5], a[6];
inline bool comp(long long x, long long y) { return p[x] < p[y]; }
inline void solve() {
  n = read();
  c = read();
  Q = read();
  for (long long i = 1; i <= n; i++) p[i] = read();
  for (long long j = 0; j <= c; j++) {
    for (long long i = 1; i <= n; i++) {
      st[j][i] = st[j][i - 1];
      for (long long u = min(n, i + j); u > i; u--)
        if (p[u] < p[i]) {
          st[j][i] += C[n - u][j - u + i];
        }
      ed[j][i] = st[j][i] + C[n - i][j] - 1;
    }
  }
  for (long long x, k, r, nw, v; Q--;) {
    x = read();
    k = read();
    if (k > C[n][c]) {
      puts("-1");
      continue;
    }
    r = c;
    nw = 0;
    while (1) {
      v = min(upper_bound(st[r] + 1, st[r] + n + 1, k + st[r][nw] - 1) - st[r],
              upper_bound(ed[r] + 1, ed[r] + n + 1, k + st[r][nw] - 1,
                          greater<long long>()) -
                  ed[r]);
      if (v > x) {
        cout << p[x] << "\n";
        break;
      }
      k -= st[r][v - 1] - st[r][nw];
      for (long long i = 0; i <= r; i++) a[i] = v + i;
      sort(a, a + r + 1, comp);
      for (long long i = 0; i <= r; i++) {
        if (k <= C[n - a[i]][r - a[i] + v]) {
          r -= a[i] - v;
          nw = a[i];
          break;
        } else
          k -= C[n - a[i]][r - a[i] + v];
      }
      if (nw >= x) {
        cout << p[nw - (x - v)] << "\n";
        break;
      }
    }
  }
}
signed main() {
  for (long long i = 0; i <= 4; i++) st[i][0] = C[0][i] = 1;
  for (long long i = 1; i < N; i++) {
    C[i][0] = 1;
    C[i][1] = C[i][0] + (i - 1);
    C[i][2] = C[i][1] + (i - 1) * (i - 2) / 2;
    C[i][3] = C[i][2] + (i - 1) * (i - 2) / 2 * (i - 3) / 3;
    C[i][4] = C[i][3] + (i - 1) * (i - 2) / 2 * (i - 3) / 3 * (i - 4) / 4;
  }
  for (long long T = read(); T--;) solve();
  return (0 - 0);
}
