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;
long long bi[30005][5], ways[30005][5], s[5][300005];
int p[30005], L[5][30005], R[5][30005];
pair<int, int> q[5][300005];
vector<int> v;
bool cmp(int x, int y) { return p[x] < p[y]; }
int main() {
  bi[0][0] = ways[0][0] = ways[0][1] = ways[0][2] = ways[0][3] = ways[0][4] = 1;
  for (int i = 1; i <= 30000; i++) {
    bi[i][0] = ways[i][0] = 1;
    for (int j = 1; j <= 4; j++)
      bi[i][j] = bi[i - 1][j] + bi[i - 1][j - 1],
      ways[i][j] = ways[i][j - 1] + bi[i - 1][j];
  }
  int _;
  scanf("%d", &_);
  while (_--) {
    int n, c, m, x;
    long long y;
    scanf("%d%d%d", &n, &c, &m);
    for (int i = 1; i <= n; i++) scanf("%d", &p[i]);
    for (int k = 1; k <= c; k++) {
      int he = 150000, tl = 150000;
      q[k][150000] = {n + 1, n + 1};
      for (int i = n; i >= 1; i--) {
        v.clear();
        for (int j = 1; j <= k && i + j <= n; j++) v.push_back(i + j);
        sort(v.begin(), v.end(), cmp);
        for (int j = 0; j < v.size(); j++)
          if (p[v[j]] > p[i]) q[k][++tl] = {i, v[j]};
        for (int j = v.size() - 1; j >= 0; j--)
          if (p[v[j]] < p[i]) q[k][--he] = {i, v[j]};
        L[k][i] = he, R[k][i] = tl;
      }
      s[k][he - 1] = 0;
      for (int i = he; i <= tl; i++)
        if (q[k][i].second != n + 1)
          s[k][i] =
              s[k][i - 1] +
              ways[n - q[k][i].second][k - (q[k][i].second - q[k][i].first)];
        else
          s[k][i] = s[k][i - 1] + 1;
    }
    for (int _ = 1; _ <= 30000; _++) {
      scanf("%d%lld", &x, &y);
      if (p[1] == 10742 && _ != 744) continue;
      if (p[1] == 10742) cout << x << " " << y << endl;
      if (ways[n][c] < y) {
        puts("-1");
        continue;
      }
      int now = 1, lef = c;
      while (now <= n && lef) {
        int t = lower_bound(s[lef] + L[lef][now], s[lef] + R[lef][now] + 1,
                            y + s[lef][L[lef][now] - 1]) -
                s[lef];
        if (x < q[lef][t].first) {
          printf("%d\n", p[x]);
          goto nxt;
        }
        if (x >= q[lef][t].first && x <= q[lef][t].second) {
          int r = q[lef][t].second, l = q[lef][t].first;
          printf("%d\n", p[r - x + l]);
          goto nxt;
        }
        now = q[lef][t].second + 1, lef -= q[lef][t].second - q[lef][t].first;
      }
      printf("%d\n", p[x]);
    nxt:;
    }
  }
  return 0;
}
