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 M = 3e5 + 9;
int n, m, q;
long long f[M][5];
int a[M], ans[M];
struct P {
  long long j;
  int k, id;
} b[M], g[M];
bool cmp(const P& l, const P& r) { return l.j == r.j ? l.k < r.k : l.j < r.j; }
bool vis[M];
void re(int l, int r, int bol) {
  for (int i = l + 1; i <= r; ++i) vis[i] = bol;
  for (int i = l; i <= (r + l) / 2; ++i) {
    swap(a[i], a[r - i + l]);
  }
}
void dfs(int now, int c, int l, int r, int p) {
  if (l > r || now == n + 1) return;
  int d[7], id[7];
  c = min(c, n - now);
  for (int i = 0; i <= c; ++i) {
    int x = now, y = now + i;
    d[i] = a[y];
    id[i] = i;
  }
  sort(id, id + c + 1, [&](int x, int y) { return d[x] < d[y]; });
  for (int i = 0; i <= c; ++i) {
    int x = now, y = now + id[i], k = c - id[i];
    if (y > n) continue;
    int sum = f[y + 1][k], L = l - 1, R = 0;
    if (!vis[now]) re(x, y, 1);
    if (vis[now]) sum = p, k = c;
    for (int o = l; o <= r; ++o) {
      if (b[o].j <= sum) {
        if (b[o].k == now) {
          ans[b[o].id] = a[now];
        } else {
          b[++L] = b[o];
        }
      } else {
        b[o].j -= sum;
        g[++R] = b[o];
      }
    }
    for (int o = L + 1; o <= L + R; ++o) {
      b[o] = g[o - L];
    }
    dfs(now + 1, k, l, L, sum);
    l = L + 1;
    if (!vis[now]) re(x, y, 0);
    if (vis[now]) break;
  }
}
void work() {
  scanf("%d%d%d", &n, &m, &q);
  f[n + 1][0] = 1;
  for (int i = n; i >= 1; --i) {
    for (int j = 0; j <= 4; ++j) {
      int r = i + j + 1;
      if (r > n + 1) continue;
      for (int k = 0; k <= 4; ++k) {
        if (j + k <= m) f[i][j + k] += f[r][k];
      }
    }
  }
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    for (int j = 1; j <= m; ++j) {
      f[i][j] += f[i][j - 1];
    }
  }
  for (int i = 1; i <= q; ++i) {
    scanf("%d%lld", &b[i].k, &b[i].j);
    b[i].id = i;
    if (b[i].j > f[1][m]) ans[i] = -1;
  }
  sort(b + 1, b + q + 1, cmp);
  dfs(1, m, 1, q, 0);
  for (int i = 1; i <= q; ++i) {
    printf("%d\n", ans[i]);
  }
  for (int i = n; i >= 1; --i) {
    for (int j = 0; j <= 4; ++j) {
      f[i][j] = 0;
    }
  }
  f[n + 1][0] = 0;
}
int main() {
  int T;
  scanf("%d", &T);
  while (T--) work();
  return 0;
}
