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>
const int MAXN = 3e4 + 10;
const int MAXQ = 3e5 + 10;
const long long INF = 2e18;
int p[MAXN];
int ans[MAXQ], qpos[MAXQ];
std::vector<std::pair<int, int> > pos[MAXQ];
long long ways[MAXN][5];
void init(int n = 3e4) {
  for (int i = 0; i <= 4; i++) ways[i][0] = 1;
  for (int i = 1; i <= n; i++) {
    long long coff = ways[i][0] = 1;
    for (int j = 1; j <= 4; j++) {
      coff = coff * (i - j) / j;
      ways[i][j] = ways[i][j - 1] + coff;
    }
  }
}
std::vector<std::pair<int, int> > next_small[MAXN], next_large[MAXN];
long long offset[MAXN][5];
void solve() {
  int n, c, q;
  scanf("%d%d%d", &n, &c, &q);
  for (int i = 1; i <= n; i++) scanf("%d", p + i);
  std::vector<std::pair<long long, int> > query[5];
  for (int i = 1; i <= q; i++) {
    int x;
    long long y;
    scanf("%d%lld", &x, &y);
    ans[i] = 0;
    if (y > ways[n][c]) {
      ans[i] = -1;
    } else {
      pos[i].clear();
      qpos[i] = x;
      query[c].emplace_back(y, i);
    }
  }
  for (int i = 1; i <= n; i++) {
    next_small[i].clear();
    next_large[i].clear();
    for (int j = 1; j <= c && i + j <= n; j++) {
      if (p[i + j] > p[i])
        next_large[i].emplace_back(p[i + j], j);
      else
        next_small[i].emplace_back(p[i + j], j);
    }
    std::sort(next_large[i].begin(), next_large[i].end());
    std::sort(next_small[i].begin(), next_small[i].end());
    std::reverse(next_large[i].begin(), next_large[i].end());
    for (int j = 0; j <= c; j++) {
      offset[i][j] = offset[i - 1][j];
      for (auto it : next_small[i]) {
        int y = it.second;
        if (y <= j) {
          offset[i][j] += ways[n - i - y][j - y];
        }
      }
    }
  }
  for (int cur = c; cur > 0; cur--) {
    std::sort(query[cur].begin(), query[cur].end());
    int head = 0, tail = (int)query[cur].size() - 1;
    long long curh = 0, curt = ways[n][cur];
    for (int i = 1; i <= n; i++) {
      for (auto it : next_small[i]) {
        int x, y;
        std::tie(x, y) = it;
        if (y > cur) continue;
        curh += ways[n - y - i][cur - y];
        while (head <= tail && query[cur][head].first <= curh) {
          int a = query[cur][head].second;
          long long b = query[cur][head].first;
          pos[a].emplace_back(i, y);
          query[cur - y].emplace_back(
              b - (curh - ways[n - y - i][cur - y]) + offset[i + y][cur - y],
              a);
          head++;
        }
      }
      for (auto it : next_large[i]) {
        int x, y;
        std::tie(x, y) = it;
        if (y > cur) continue;
        curt -= ways[n - y - i][cur - y];
        while (head <= tail && query[cur][tail].first > curt) {
          int a = query[cur][tail].second;
          long long b = query[cur][tail].first;
          pos[a].emplace_back(i, y);
          query[cur - y].emplace_back(b - curt + offset[i + y][cur - y], a);
          tail--;
        }
      }
    }
  }
  for (int i = 1; i <= q; i++) {
    if (ans[i] == -1)
      printf("%d\n", ans[i]);
    else {
      for (auto it : pos[i]) {
        int x, y;
        std::tie(x, y) = it;
        std::reverse(p + x, p + x + y + 1);
      }
      printf("%d\n", p[qpos[i]]);
      for (auto it : pos[i]) {
        int x, y;
        std::tie(x, y) = it;
        std::reverse(p + x, p + x + y + 1);
      }
    }
  }
}
int main() {
  int t;
  scanf("%d", &t);
  init();
  while (t--) {
    solve();
  }
}
