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 = 30010;

typedef long long LL;

int num[N]; LL f[5][N], pre[5][N];

vector<int> pos[5][N];

void solve() {
    int n, c, q; cin >> n >> c >> q;
    for (int i = 1; i <= n; i++) cin >> num[i];
    for (int i = 0; i <= c; i++) f[i][n + 1] = 1, f[i][n + 2] = 0;
    for (int i = n; i >= 1; i--)
        for (int j = 0; j <= c; j++) {
            f[j][i] = 0;
            for (int k = 0; k <= j && i + k <= n; k++) 
                f[j][i] += f[j - k][i + k + 1];
        }
    for (int j = 0; j <= c; j++)
        for (int i = 1; i <= n; i++) {
            pos[j][i].clear();
            for (int k = 0; k <= j; k++) if (i + k <= n)
                pos[j][i].push_back(k);
            sort(pos[j][i].begin(), pos[j][i].end(), [&](int a, int b) { return num[i + a] < num[i + b]; });
            pre[j][i] = pre[j][i - 1];
            for (auto t : pos[j][i]) {
                if (!t) break;
                pre[j][i] += f[j - t][i + t + 1]; 
            }
        }
    while (q--) {
        LL id; int cur, p = 1, lst = c; cin >> cur >> id;
        LL zzh = id;
        if (id > f[c][1]) { cout << -1 << endl; continue; }
        while (233) {
            int l = p, r = n, mid, eql = p - 1;
            while (l <= r) {
                mid = (l + r) >> 1;
                LL tmp = pre[lst][mid] - pre[lst][p - 1];
                if (tmp < id && tmp + f[lst][mid + 1] >= id) eql = mid, l = mid + 1;
                else r = mid - 1;
            }
            id -= pre[lst][eql] - pre[lst][p - 1];
            if (p <= cur && cur <= eql) { cout << num[cur] << endl; break; }
            p = eql + 1; int len = 0;
            for (auto t : pos[lst][p]) {
                if (f[lst - t][p + t + 1] < id) id -= f[lst - t][p + t + 1];
                else { len = t; break; }
            }
            assert(len);
            if (p <= cur && cur <= p + len) { cout << num[p + len - cur + p] << endl; break; }
            p += len + 1, lst -= len;
        }
    }
}

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int T; cin >> T;
    while (T--) solve(); 
}