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 chkmax(T &first, T second) {
  first < second ? first = second : T();
}
template <typename T>
void chkmin(T &first, T second) {
  first > second ? first = second : T();
}
template <typename T>
void readint(T &first) {
  first = 0;
  int f = 1;
  char c;
  for (c = getchar(); !isdigit(c); c = getchar())
    if (c == '-') f = -1;
  for (; isdigit(c); c = getchar()) first = first * 10 + c - '0';
  first *= f;
}
const int MAXN = 30015;
const long long INF = 1ll << 60;
int n, k, a[MAXN], b[MAXN][5];
long long f[MAXN];
void solve() {
  memset(f, 0, sizeof(f));
  memset(a, 0x3f, sizeof(a));
  int Q;
  readint(n), readint(k), readint(Q);
  for (int i = 1; i <= n; ++i) readint(a[i]);
  f[n + 1] = 1;
  for (int i = n; i; --i) {
    for (int j = 0; j <= k; ++j) f[i] += f[i + j + 1], b[i][j] = j;
    sort(b[i], b[i] + k + 1,
         [&](int first, int second) { return a[i + first] < a[i + second]; });
    chkmin(f[i], INF);
  }
  int p = 1;
  while (f[p + b[p][0] + 1] == INF) {
    reverse(a + p, a + p + b[p][0] + 1);
    p = p + b[p][0] + 1;
  }
  while (Q--) {
    int first;
    long long second;
    readint(first), readint(second);
    if (second > f[1])
      printf("-1\n");
    else if (first < p)
      printf("%d\n", a[first]);
    else {
      int i = p;
      while (1) {
        bool flag = 0;
        for (int t = 0; t <= k; ++t) {
          int j = b[i][t];
          if (second > f[i + j + 1])
            second -= f[i + j + 1];
          else {
            if (i + j < first) {
              i = i + j + 1;
              break;
            }
            printf("%d\n", a[i + j - (first - i)]);
            flag = 1;
            break;
          }
        }
        if (flag) break;
      }
    }
  }
}
int main() {
  int T;
  readint(T);
  while (T--) solve();
  return 0;
}
