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;
template <typename T>
void chmin(T &x, const T &y) {
  if (x > y) x = y;
}
template <typename T>
void chmax(T &x, const T &y) {
  if (x < y) x = y;
}
char readc() {
  char c;
  while (isspace((c = getchar())))
    ;
  return c;
}
int read() {
  char c;
  while ((c = getchar()) < '-')
    ;
  if (c == '-') {
    int x = (c = getchar()) - '0';
    while ((c = getchar()) >= '0') x = x * 10 + c - '0';
    return -x;
  }
  int x = c - '0';
  while ((c = getchar()) >= '0') x = x * 10 + c - '0';
  return x;
}
const int C = 5, N = 3e4 + 5;
int64_t dp[C][N], sum[C][N];
int p[N];
vector<int> lk[N];
int main() {
  for (int c = 0; c <= 4; ++c) {
    dp[c][0] = 1;
    for (int n = 1; n <= 30000; ++n)
      for (int i = 0; i <= min(n - 1, c); ++i) dp[c][n] += dp[c - i][n - i - 1];
  }
  int tt = read();
  while (tt--) {
    int n = read(), c = read(), q = read();
    for (int i = 1; i <= n; ++i) p[i] = read();
    for (int i = n; i >= 1; --i) {
      lk[i].clear();
      for (int j = 0; j <= c; ++j) {
        if (i + j <= n) lk[i].push_back(j);
        sort(lk[i].begin(), lk[i].end(),
             [&](int x, int y) { return p[i + x] < p[i + y]; });
      }
    }
    for (int i = 1; i <= n; ++i) {
      for (int j = 0; j <= c; ++j) {
        sum[j][i] = sum[j][i - 1];
        for (int k = 0; k <= j; ++k)
          if (i + k <= n && p[i + k] < p[i]) sum[j][i] += dp[j - k][n - i - k];
      }
    }
    while (q--) {
      int query_i = read();
      int64_t k;
      scanf("%lld", &k);
      if (k > dp[c][n]) {
        puts("-1");
        continue;
      }
      int i = 1, nc = c;
      while (i <= n) {
        int j = 0;
        int64_t now;
        while (1) {
          while (lk[i][j] > nc) ++j;
          if (k <= (now = dp[nc - lk[i][j]][n - i - lk[i][j]])) break;
          k -= now;
          ++j;
        }
        nc -= lk[i][j];
        int i1 = i + lk[i][j];
        if (i1 >= query_i) {
          printf("%d\n", p[i + i1 - query_i]);
          break;
        }
        i = i1 + 1;
        i1 =
            lower_bound(sum[nc] + i, sum[nc] + n, k - sum[nc][i - 1]) - sum[nc];
        if (i1 > query_i) {
          printf("%d\n", p[query_i]);
          break;
        }
        k -= sum[nc][i1 - 1] - sum[nc][i - 1];
        i = i1;
      }
    }
  }
}
