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;
const int mxn = 30006, mxk = 5;
int n, k, q;
int a[mxn], first[mxn][mxk][mxk];
long long dp[mxn][mxk], second[mxn][mxk];
void answer() {
  cin >> n >> k >> q;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 0; i <= k; i++) dp[n + 1][i] = 1, a[n + i + 1] = n + 1;
  for (int i = n; i; i--)
    for (int j = 0; j <= k; j++) {
      dp[i][j] = 0;
      for (int l = 0; l <= j && i + l <= n; l++) {
        dp[i][j] += dp[i + l + 1][j - l];
      }
    }
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= k; j++) {
      for (int l = 0; l <= j; l++) first[i][j][l] = l;
      sort(first[i][j], first[i][j] + j + 1,
           [&](int x, int y) { return a[i + x] < a[i + y]; });
    }
  for (int j = 0; j <= k; j++)
    for (int i = 1; i <= n + 1; i++) {
      second[i][j] = second[i - 1][j];
      for (int l = 0; l <= j && first[i][j][l]; l++) {
        second[i][j] += dp[i + first[i][j][l]][j - first[i][j][l]];
      }
    }
  while (q--) {
    long long w, z;
    cin >> w >> z;
    if (z-- > dp[1][k]) {
      cout << -1 << '\n';
      continue;
    }
    int x = 1, y = k, ret = 0;
    while (x <= w && !ret) {
      for (int i = 0; i <= y; i++) {
        int v = first[x][y][i];
        if (z >= dp[x + v + 1][y - v]) {
          z -= dp[x + v + 1][y - v];
        } else {
          if (v) {
            if (x + v + 1 <= w)
              x += v + 1, y -= v;
            else
              ret = a[2 * x + v - w];
          } else {
            int l = x, r = w + 1;
            while (r - l > 1) {
              int mid = (l + r) / 2;
              if (second[mid + 1][y] - second[x + 1][y] <= z &&
                  second[mid + 1][y] - second[x + 1][y] + dp[mid + 1][y] > z)
                l = mid;
              else
                r = mid;
            }
            if (l > x) z -= second[l][y] - second[x + 1][y];
            x = r;
            if (x > w) ret = a[w];
          }
          break;
        }
      }
    }
    cout << ret << '\n';
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t;
  cin >> t;
  for (int i = 0; i < t; i++) answer();
  return 0;
}
