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 maxn = 30005;
const int L = 100;
long long cnt[maxn][5], l[maxn][5], r[maxn][5], sl[maxn][5], sr[maxn][5];
int _, n, p[maxn], m, q;
void solve() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= n; i++) scanf("%d", &p[i]);
  for (int j = 0; j <= m; j++) cnt[n + 1][j] = 1;
  for (int i = n; i; i--) {
    for (int j = 0; j <= m; j++) {
      cnt[i][j] = cnt[i + 1][j];
      for (int k = 1; k <= j; k++)
        if (i + k <= n) cnt[i][j] += cnt[i + k + 1][j - k];
    }
  }
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= m; j++) {
      long long x = 0, y = 0;
      for (int w = 1; w <= j && i + w <= n; w++) {
        if (p[i + w] < p[i])
          x += cnt[i + w + 1][j - w];
        else
          y += cnt[i + w + 1][j - w];
      }
      l[i][j] = x;
      r[i][j] = y;
      sl[i][j] = sl[i - 1][j] + x;
      sr[i][j] = sr[i - 1][j] + y;
    }
  while (q--) {
    long long t;
    int pos, now, cost;
    scanf("%d%lld", &pos, &t);
    if (t > cnt[1][m]) {
      puts("-1");
      continue;
    }
    now = 1;
    cost = m;
    while (now <= pos) {
      if (t > l[now][cost] && t <= cnt[now][cost] - r[now][cost]) {
        int L = now, R = n + 1;
        while (r - l > 1) {
          int mid = (L + R) >> 1;
          long long u = sl[mid][cost] - sl[now - 1][cost];
          long long v = sr[mid][cost] - sr[now - 1][cost];
          if (t > u && t <= cnt[now][cost] - v)
            L = mid;
          else
            R = mid;
        }
        now = R;
        if (now > pos) printf("%d\n", p[pos]);
      } else {
        vector<pair<int, int> > A;
        A.clear();
        for (int i = 0; i <= cost && i + now <= n; i++)
          A.push_back((pair<int, int>){p[i + now], i});
        sort(A.begin(), A.end());
        for (auto x : A) {
          long long cc = cnt[x.second + now + 1][cost - x.second];
          if (t <= cc) {
            if (pos >= now && pos <= now + x.second) {
              printf("%d\n", p[now + now + x.second - pos]);
            }
            now += x.second + 1;
            cost -= x.second;
            break;
          }
          t -= cc;
        }
      }
    }
  }
}
int main() {
  scanf("%d", &_);
  while (_--) solve();
  return 0;
}
