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>
template <class T>
inline void read(T &res) {
  res = 0;
  bool bo = 0;
  char c;
  while (((c = getchar()) < '0' || c > '9') && c != '-')
    ;
  if (c == '-')
    bo = 1;
  else
    res = c - 48;
  while ((c = getchar()) >= '0' && c <= '9')
    res = (res << 3) + (res << 1) + (c - 48);
  if (bo) res = ~res + 1;
}
const int N = 3e4 + 5;
const long long INF = 1e18;
int n, c, q, p[N];
long long f[N][5], g[5][N], s[5][N][17];
std::vector<std::pair<int, long long> > orz[5][N];
int jjd(int x, long long y) {
  int i = 1, cur = c;
  while (i <= n) {
    int nxt = i;
    for (int j = 15; j >= 0; j--)
      if (nxt + (1 << j) - 1 <= n && s[cur][nxt][j] < y &&
          y <= s[cur][nxt][j] + g[cur][nxt + (1 << j) - 1])
        y -= s[cur][nxt][j], nxt += 1 << j;
    if (i <= x && x < nxt) return p[x];
    i = nxt;
    for (int j = 0; j < orz[cur][i].size(); j++)
      if (y <= orz[cur][i][j].second) {
        if (i <= x && x <= orz[cur][i][j].first)
          return p[i + orz[cur][i][j].first - x];
        int tc = cur;
        cur -= orz[tc][i][j].first - i;
        i = orz[tc][i][j].first + 1;
        break;
      } else
        y -= orz[cur][i][j].second;
  }
  return -1;
}
void work() {
  int x;
  long long y;
  read(n);
  read(c);
  read(q);
  for (int i = 1; i <= n; i++) read(p[i]);
  for (int c = 0; c <= 4; c++) f[n + 1][c] = !c;
  for (int i = n; i >= 1; i--)
    for (int j = i; j <= n && j - i <= c; j++)
      for (int k = j - i; k <= c; k++) {
        f[i][k] += f[j + 1][k - j + i];
        if (f[i][k] > INF) f[i][k] = INF;
      }
  for (int i = 1; i <= n + 1; i++)
    for (int j = 1; j <= c; j++) f[i][j] += f[i][j - 1];
  for (int d = 0; d <= c; d++)
    for (int i = n; i >= 1; i--) {
      orz[d][i].clear();
      g[d][i] = s[d][i][0] = 0;
      for (int j = i; j <= n && j - i <= d; j++)
        orz[d][i].push_back(std::make_pair(j, f[j + 1][d - j + i]));
      std::sort(orz[d][i].begin(), orz[d][i].end(),
                [&](std::pair<int, long long> x, std::pair<int, long long> y) {
                  return p[x.first] < p[y.first];
                });
      for (int j = 0; j < orz[d][i].size(); j++) {
        if (orz[d][i][j].first == i) {
          g[d][i] = orz[d][i][j].second;
          break;
        }
        s[d][i][0] += orz[d][i][j].second;
        if (s[d][i][0] > INF) s[d][i][0] = INF;
      }
      for (int j = 0; j < 15; j++) {
        s[d][i][j + 1] = s[d][i][j];
        if (i + (1 << j) <= n) s[d][i][j + 1] += s[d][i + (1 << j)][j];
        if (s[d][i][j + 1] > INF) s[d][i][j + 1] = INF;
      }
    }
  while (q--) {
    read(x);
    read(y);
    if (y > f[1][c])
      puts("-1");
    else
      printf("%d\n", jjd(x, y));
  }
}
int main() {
  int T;
  read(T);
  while (T--) work();
  return 0;
}
