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 N = 30050;
int t, n, c, q;
unsigned long long a[N][5], presum[N][5], nxtsum[N][5];
int p[N], ch[N][6];
int main() {
  scanf("%d", &t);
  while (t--) {
    scanf("%d%d%d", &n, &c, &q);
    for (int i = 1; i <= n; i++) {
      scanf("%d", &p[i]);
      a[i][0] = 1;
      ch[i][0] = 0;
    }
    for (int j = 0; j <= c; j++) a[n + 1][j] = 1;
    for (int j = 1; j <= c; j++) {
      for (int i = n; i >= 1; i--) {
        a[i][j] = 0;
        for (int k = 0; k <= j && i + k <= n; k++)
          a[i][j] += a[i + k + 1][j - k];
        assert(a[i][j] <= 1e18);
      }
    }
    pair<int, int> temp[6];
    for (int i = 1; i <= n; i++) {
      temp[0].first = 0;
      for (int j = 0; j <= c && i + j <= n; j++)
        temp[++temp[0].first] = make_pair(p[i + j], j);
      sort(temp + 1, temp + temp[0].first + 1);
      ch[i][0] = temp[0].first;
      memcpy(presum + i, presum + i - 1, 5 * sizeof(unsigned long long));
      memcpy(nxtsum + i, nxtsum + i - 1, 5 * sizeof(unsigned long long));
      bool flag = false;
      for (int j = 1; j <= temp[0].first; j++) {
        ch[i][j] = temp[j].second;
        if (ch[i][j] == 0) {
          flag = true;
          continue;
        }
        if (!flag) {
          for (int k = ch[i][j]; k <= c; k++)
            presum[i][k] += a[i + ch[i][j] + 1][k - ch[i][j]];
        } else {
          for (int k = ch[i][j]; k <= c; k++)
            nxtsum[i][k] += a[i + ch[i][j] + 1][k - ch[i][j]];
        }
      }
    }
    while (q--) {
      int x;
      unsigned long long y;
      scanf("%d%llu", &x, &y);
      vector<pair<int, int> > v;
      int pos = 1, nowc = c;
      if (y > a[1][c]) {
        puts("-1");
        continue;
      }
      while (pos <= n) {
        if (nowc == 0 || presum[n][nowc] - presum[pos - 1][nowc] + 1 == y)
          break;
        else if (presum[n][nowc] - presum[pos - 1][nowc] >= y) {
          int l = pos, r = n;
          while (l < r) {
            int mid = (l + r) >> 1;
            if (presum[mid][nowc] - presum[pos - 1][nowc] >= y)
              r = mid;
            else
              l = mid + 1;
          }
          y -= presum[l - 1][nowc] - presum[pos - 1][nowc];
          pos = l;
          for (int i = 1; i <= ch[pos][0]; i++)
            if (a[pos + ch[pos][i] + 1][nowc - ch[pos][i]] < y)
              y -= a[pos + ch[pos][i] + 1][nowc - ch[pos][i]];
            else {
              v.push_back(make_pair(pos, ch[pos][i]));
              nowc -= ch[pos][i];
              pos += ch[pos][i] + 1;
            }
        } else {
          y -= presum[n][nowc] - presum[pos - 1][nowc] + 1;
          int l = pos, r = n;
          while (l < r) {
            int mid = (l + r) >> 1;
            if (nxtsum[n][nowc] - nxtsum[mid - 1][nowc] < y)
              r = mid;
            else
              l = mid + 1;
          }
          y -= nxtsum[n][nowc] - nxtsum[l - 1][nowc];
          pos = l - 1;
          bool flag = false;
          for (int i = 1; i <= ch[pos][0]; i++)
            if (ch[pos][i] == 0)
              flag = true;
            else if (flag) {
              if (a[pos + ch[pos][i] + 1][nowc - ch[pos][i]] < y)
                y -= a[pos + ch[pos][i] + 1][nowc - ch[pos][i]];
              else {
                v.push_back(make_pair(pos, ch[pos][i]));
                nowc -= ch[pos][i];
                pos += ch[pos][i] + 1;
              }
            }
        }
      }
      int ans = p[x];
      for (auto u : v) {
        if (x >= u.first && x <= u.first + u.second)
          ans = p[u.first + u.first + u.second - x];
      }
      printf("%d\n", ans);
    }
  }
  return 0;
}
