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>
int TC, N, C, Q, a[30001];
long long count[30002][5];
long long marginL[30002][5], marginR[30002][5];
int F(int pos, long long t) {
  if (t > count[1][C]) return -1;
  int start = 1, rC = C;
  while (1) {
    int l = start, r = N + 1;
    while (l < r) {
      int m = l + r >> 1;
      if (marginL[m][rC] - marginL[start - 1][rC] < t &&
          t <= count[start][rC] - marginR[m][rC] + marginR[start - 1][rC])
        l = m + 1;
      else
        r = m;
    }
    if (pos < l) return a[pos];
    std::pair<int, std::pair<int, long long> > Q[7];
    int D = 0;
    for (int i = 0; i <= rC && l + i <= N; i++)
      Q[++D] = {a[l + i], {i, count[l + i + 1][rC - i]}};
    std::sort(Q + 1, Q + D + 1);
    for (int i = 1; i <= D; i++) {
      if (t <= Q[i].second.second) {
        if (l <= pos && pos <= l + Q[i].second.first)
          return a[l + l + Q[i].second.first - pos];
        start = l + Q[i].second.first + 1;
        rC -= Q[i].second.first;
        break;
      } else
        t -= Q[i].second.second;
    }
  }
}
int main() {
  for (scanf("%d", &TC); TC--;) {
    scanf("%d%d%d", &N, &C, &Q);
    for (int i = 1; i <= N; i++) scanf("%d", a + i);
    for (int i = 1; i <= N + 1; i++) {
      count[i][0] = 1;
      marginL[i][0] = marginR[i][0] = 0;
    }
    for (int j = 0; j <= C; j++) {
      count[N][j] = count[N + 1][j] = 1;
      marginL[N][j] = marginR[N][j] = 1;
      for (int i = N - 1; i; i--) {
        count[i][j] = count[i + 1][j];
        for (int k = 1; k <= j && i + k <= N; k++) {
          count[i][j] += count[i + k + 1][j - k];
          if (a[i] > a[i + k])
            marginL[i][j] += count[i + k + 1][j - k];
          else
            marginR[i][j] += count[i + k + 1][j - k];
        }
      }
    }
    for (int j = 0; j <= C; j++)
      for (int i = 1; i <= N; i++) {
        marginL[i][j] += marginL[i - 1][j];
        marginR[i][j] += marginR[i - 1][j];
      }
    while (Q--) {
      int pos;
      long long t;
      scanf("%d%lld", &pos, &t);
      printf("%d\n", F(pos, t));
    }
  }
  return 0;
}
