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>
bool chkmax(T &x, T y) {
  return x < y ? x = y, true : false;
}
template <typename T>
bool chkmin(T &x, T y) {
  return x > y ? x = y, true : false;
}
long long readint() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int n, c, q;
int p[30005], d[30005][5], to[30005][5][20];
vector<pair<long long, long long> > v[30005][5];
void work() {
  n = readint();
  c = readint();
  q = readint();
  for (int i = 1; i <= n; i++) p[i] = readint();
  for (int i = 0; i <= c; i++) d[n + 1][i] = 1;
  for (int i = n; i >= 1; i--) {
    for (int j = 0; j <= c; j++) d[i][j] = d[i + 1][j];
    if (i <= n - 1) {
      for (int j = 1; j <= c; j++) d[i][j] += d[i + 2][j - 1];
    }
    if (i <= n - 2) {
      for (int j = 2; j <= c; j++) d[i][j] += d[i + 3][j - 2];
    }
    if (i <= n - 3) {
      for (int j = 3; j <= c; j++) d[i][j] += d[i + 4][j - 3];
    }
    if (i <= n - 4) {
      for (int j = 4; j <= c; j++) d[i][j] += d[i + 5][j - 4];
    }
    for (int j = 1; j <= c; j++)
      if (d[i][j] > 1e18 + 1) d[i][j] = 1e18 + 1;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= c; j++) {
      v[i][j].push_back(make_pair(p[i], d[i + 1][j]));
      if (i <= n - 1 && j >= 1)
        v[i][j].push_back(make_pair(p[i + 1], d[i + 2][j - 1]));
      if (i <= n - 2 && j >= 2)
        v[i][j].push_back(make_pair(p[i + 2], d[i + 3][j - 2]));
      if (i <= n - 3 && j >= 3)
        v[i][j].push_back(make_pair(p[i + 3], d[i + 4][j - 3]));
      if (i <= n - 4 && j >= 4)
        v[i][j].push_back(make_pair(p[i + 4], d[i + 5][j - 4]));
      sort(v[i][j].begin(), v[i][j].end());
      long long sum = 0;
      for (auto r : v[i][j]) {
        if (r.first == p[i]) to[i][j][0] = sum;
        sum += r.second;
      }
    }
  }
  for (int k = 1; k <= 14; k++) {
    for (int i = 1; i <= n - (1 << k) + 1; i++) {
      for (int j = 1; j <= c; j++) {
        to[i][j][k] = to[i][j][k - 1] + to[i + (1 << (k - 1))][j][k - 1];
        if (to[i][j][k] > 1e18 + 1) to[i][j][k] = 1e18 + 1;
      }
    }
  }
  long long x, y;
  while (q--) {
    y = readint();
    x = readint();
    if (d[1][c] < x) {
      printf("-1\n");
      continue;
    }
    int ni = 1, nj = c, fl = 0;
    while (ni <= n) {
      for (int i = 19; i >= 0; i--)
        if (ni + (1 << i) <= n + 1 && x > to[ni][nj][i] &&
            x <= to[ni][nj][i] + d[ni + (1 << i)][nj])
          x -= to[ni][nj][i], ni += 1 << i;
      long long sum = 0;
      for (auto r : v[ni][nj]) {
        if (x <= sum + r.second) {
          if (ni <= n - 1 && r.first == p[ni + 1]) {
            if (y == ni) printf("%d\n", p[ni + 1]), fl = 1;
            if (y == ni + 1) printf("%d\n", p[ni]), fl = 1;
            ni += 2, nj--;
          } else if (ni <= n - 2 && r.first == p[ni + 2]) {
            if (y == ni) printf("%d\n", p[ni + 2]), fl = 1;
            if (y == ni + 2) printf("%d\n", p[ni]), fl = 1;
            ni += 3, nj -= 2;
          } else if (ni <= n - 3 && r.first == p[ni + 3]) {
            if (y == ni) printf("%d\n", p[ni + 3]), fl = 1;
            if (y == ni + 1) printf("%d\n", p[ni + 2]), fl = 1;
            if (y == ni + 2) printf("%d\n", p[ni + 1]), fl = 1;
            if (y == ni + 3) printf("%d\n", p[ni]), fl = 1;
            ni += 4, nj -= 3;
          } else if (ni <= n - 4 && r.first == p[ni + 4]) {
            if (y == ni) printf("%d\n", p[ni + 4]), fl = 1;
            if (y == ni + 1) printf("%d\n", p[ni + 3]), fl = 1;
            if (y == ni + 3) printf("%d\n", p[ni + 1]), fl = 1;
            if (y == ni + 4) printf("%d\n", p[ni]), fl = 1;
            ni += 5, nj -= 4;
          }
          x -= sum;
          break;
        }
        sum += r.second;
        if (fl) break;
      }
      if (fl) break;
    }
    if (!fl) printf("%d\n", p[y]);
  }
}
int main() {
  int T = readint();
  while (T--) work();
  return 0;
}
