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;
using INT = long long;
const int NN = 30300;
const int D = 110;
const int MM = 6;
const INT inf = 2e18;
INT cnt[NN][MM], dp[NN][D][MM], scnt[NN][MM];
int ID[MM];
int p[NN];
INT add(INT &u, INT v) {
  u += v;
  if (u > inf) u = inf;
}
int pre() {
  cnt[0][0] = 1;
  for (int i = 1; i < NN; i++) {
    cnt[i][0] = 1;
    for (int j = 1; j < MM; j++) {
      for (int k = 0; k <= j and k + 1 <= i; k++) {
        add(cnt[i][j], cnt[i - k - 1][j - k]);
      }
    }
  }
  for (int i = 0; i < NN; i++) {
    scnt[i][0] = cnt[i][0];
    for (int j = 1; j < MM; j++) {
      scnt[i][j] = scnt[i][j - 1];
      add(scnt[i][j], cnt[i][j]);
    }
  }
}
int main() {
  pre();
  int T;
  cin >> T;
  while (T--) {
    int n, c, Q;
    cin >> n >> c >> Q;
    for (int i = 1; i <= n; i++) {
      scanf("%d", p + i);
    }
    for (int i = 0; i <= n + 1; i++)
      for (int j = 0; j < D; j++) {
        for (int k = 0; k < MM; k++) {
          dp[i][j][k] = 0;
        }
      }
    for (int i = n; i; i--)
      for (int k = 1; k <= c; k++) {
        for (int t = 1; t <= k and i + t <= n; t++) {
          if (p[i + t] > p[i]) continue;
          for (int j = 1; j <= D; j++) {
            dp[i][j][k] = dp[i + 1][j - 1][k];
            add(dp[i][j][k], cnt[n - i - t][k - t]);
          }
        }
      }
    while (Q--) {
      int pos;
      INT s;
      scanf("%d %I64d", &pos, &s);
      if (scnt[n][c] < s) {
        puts("-1");
        continue;
      }
      int ss = c, ans = 0;
      for (int i = 1; i <= n and i <= pos; i++) {
        if (s == 0) {
          ans = p[pos];
          break;
        }
        if (i + D <= n) {
          INT sum = 0;
          for (int k = 1; k <= ss; k++) {
            add(sum, dp[i][D][k] * cnt[n - i - D][ss - k]);
          }
          if (sum < s) {
            s -= sum;
            i += D;
            continue;
          }
        }
        int len = min(ss, n - i);
        for (int j = 0; j <= len; j++) {
          ID[j] = j;
        }
        sort(ID, ID + len + 1,
             [&](int u, int v) { return p[i + u] < p[i + v]; });
        for (int j = 0; j <= len; j++) {
          if (scnt[n - (i + ID[j])][ss - ID[j]] < s) {
            s -= scnt[n - (i + ID[j])][ss - ID[j]];
          } else {
            if (i + ID[j] >= pos) {
              ans = p[i + i + ID[j] - pos];
              i += ID[j];
              ss -= ID[j];
              break;
            }
            i += ID[j];
            ss -= ID[j];
            break;
          }
        }
      }
      printf("%d\n", ans);
    }
  }
  return 0;
}
