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>
#define cs const
#define pb push_back
using namespace std;

typedef pair<int, int> pi;
#define fi first
#define se second
typedef long long ll;
cs int N = 3e4 + 50; 

int T, n, C, q, a[N]; 
int len[N][5][6];
ll dp[N][5], s[N][5][16], w[N][5][6];

int qry(int p, int k, ll x, int y){
	assert(x > 0);
	for(int i = 15; ~i; i--)
	if((p + (1 << i)) <= n + 1) {
		bool ok = s[p][k][i] < x; 
		ll way = dp[n - p - (1 << i) + 1][k];
		ok &= way >= x - s[p][k][i];
		if(ok) x -= s[p][k][i], p += 1 << i;
	} 
	
	if(p > y) return a[y];
	for(int i = 0; i <= k; i++) {
		if(x <= w[p][k][i]) {
			// flip [p, p + len[p][k][i] ]
			int l = len[p][k][i];
			if(y <= p + l) {
				static int b[6];
				for(int z = 0; z <= l; z++)
					b[z] = a[p + z];
				reverse(b, b + l + 1);
				return b[y - p];
			}
			return qry(p + l + 1, k - l, x, y);
		} x -= w[p][k][i];
	}
}
void Main(){
	scanf("%d%d%d", &n, &C, &q);
//	cout << n << " " << C<<" "<<q<<endl;
	for(int i = 0; i <= n; i++)
	for(int j = 0; j <= C; j++)
	dp[i][j] = 0; 
	dp[0][0] = 1; 
	for(int i = 1; i <= n; i++){
		for(int j = 0; j <= C; j++)
		for(int k = 0; k <= j; k++)
		if(i >= k + 1)
			dp[i][j] += dp[i - k - 1][j - k];
	}
	for(int i = 0; i <= n; i++)
	for(int j = 1; j <= C; j++)
		dp[i][j] += dp[i][j - 1];
			
	for(int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
		
	for(int i = 1; i <= n; i++)
	for(int k = 0; k <= C; k++){
		vector<pi> z;
		for(int j = 0; j <= k && i + j <= n; j++)
			z.pb(pi(a[i + j], j));
		static ll c[6];
		sort(z.begin(), z.end());
		
		for(int j = 0; j < z.size(); j++) {
			len[i][k][j] = z[j].se;
			w[i][k][j] = c[j] = 
			dp[n - (i + z[j].se)][k - z[j].se];
		}
			
//		cout << "Case " << i << " " << k << endl;
//		for(int j = 0; j < z.size(); j++)
//		cout <<z[j].se << " " << c[j] <<endl ; cout << endl;
		
		for(int j = 0; j < z.size(); j++){
			if(j) c[j] += c[j - 1];
			if(z[j].se == 0) 
				s[i][k][0] = j ? c[j - 1] : 0; 
		}
	}
	
	for(int t = 1; t <= 15; t++)
	for(int i = 1; i + (1 << t) - 1 <= n; i++)
	for(int j = 0; j <= C; j++)
	s[i][j][t] = s[i][j][t - 1] + s[i + (1 << (t - 1))][j][t - 1];
	
	while(q--){
		ll x, y; scanf("%lld%lld", &y, &x);
		if(x > dp[n][C]) puts("-1");
		else cout << qry(1, C, x, y) << '\n';
	} 
}
int main(){
	#ifdef FSYo
	freopen("1.in", "r", stdin);
	#endif
	cin >> T;
	while(T--) Main();
	return 0; 
}