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 = 3e4 + 4;
typedef long long ll;
int p[MAXN];
ll ways[10][MAXN], L[10][MAXN], R[10][MAXN];
int T, c, n, q;
int main() {
	scanf("%d", &T);
	for(int kase = 1; kase <= T; kase++) {
		scanf("%d%d%d", &n, &c, &q);
		for(int i = 1; i <= n; i++) scanf("%d", &p[i]);
		for(int i = 0; i <= c; i++) {
			ways[i][n + 1] = 1;
			L[i][n + 1] = R[i][n + 1] = 0;
			for(int j = n; j; j--) {
				ways[i][j] = ways[i][j + 1], L[i][j] = L[i][j + 1], R[i][j] = R[i][j + 1];
				for(int k = 1; k <= i && j + k <= n; k++) {
					ways[i][j] += ways[i - k] [j + 1 + k];
					if(p[j] > p[j + k]) L[i][j] += ways[i - k][j + k + 1];
					else R[i][j] += ways[i - k][j + k + 1];
				}
			}
		}
		while(q--) {
			int pos; ll id;
			scanf("%d%lld", &pos, &id);
			if(id > ways[c][1]) { printf("-1\n"); continue;}
			int cur = 1, rem = c, ans;
			while(cur <= n) {
				int l = cur, r = n, m;
				while(l <= r) {
					int mid = (l + r) >> 1;
					if(L[rem][cur] - L[rem][mid] < id && R[rem][cur] - R[rem][mid] <= ways[rem][cur] - id) {
						l = (m = mid) + 1;
					} else {
						r = mid - 1;
					}
				}
				if(m > pos) { ans = pos; break;}
				id -= L[rem][cur] - L[rem][m]; cur = m;
				vector<int> order;
				for(int k = 0; k <= rem && cur + k <= n; k++) order.push_back(k);
				sort(order.begin(), order.end(), [&](int x, int y) { return p[cur + x] < p[cur + y];});
				int cost;
				for(int i : order) {
					if(id <= ways[rem - i][cur + i + 1]) { cost = i; break;}
					else id -= ways[rem - i][cur + i + 1];
				}
				if(cost + cur >= pos) { ans = cur * 2 - pos + cost; break;}
				rem -= cost, cur += cost + 1;
			}
			printf("%d\n", p[ans]);
		}
	}
	return 0;
}
	 	    				     		    		 				