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 MAXN 100009
#define INF 1000000007
#define mp(x,y) make_pair(x,y)
#define all(v) v.begin(),v.end()
#define pb(x) push_back(x)
#define wr cout<<"----------------"<<endl;
#define ppb() pop_back()
#define tr(ii,c) for(__typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++)
#define ff first
#define ss second
#define my_little_dodge 46
#define debug(x)  cerr<< #x <<" = "<< x<<endl;
using namespace std;

typedef long long ll;
typedef pair<int,int> PII;
template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
const ll B=1e18+1;
const int C=5;
int n,c,q,arr[MAXN];
vector<PII>adj[MAXN];
ll dp[MAXN][C],par[MAXN][C];
ll dfs(int nd,int rem){
	if(rem<0)return 0;
	if(nd==n)return 1;
	ll &ret=dp[nd][rem];
	if(~ret)
		return ret;ret=0;
	tr(it,adj[nd])
		if(it->ss<=rem)
			ret=min(B,ret+dfs(nd+1+it->ss,rem-it->ss));
	return ret;		
}
vector<PII>cur;
int rec(int nd,int rem,ll th,int pos){
	if(nd==n){
		tr(it,cur)reverse(arr+it->ff,arr+it->ss+1);
		int ret=arr[pos];
		tr(it,cur)reverse(arr+it->ff,arr+it->ss+1);
		cur.clear();
		return ret;
	}
	int st=nd+1,en=n-1;
	if(st<=en){
		int to=nd;
		while(st+1<en){
			int i=(st+en)>>1;
			if(par[nd][rem]-par[i][rem]<th and th<=par[nd][rem]-par[i][rem]+dfs(i,rem))	
				st=i;
			else
				en=i;
		}int i=en;
		if(par[nd][rem]-par[i][rem]<th and th<=par[nd][rem]-par[i][rem]+dfs(i,rem))nd=i;
		else{
			i=st;
			if(par[nd][rem]-par[i][rem]<th and th<=par[nd][rem]-par[i][rem]+dfs(i,rem))nd=i;
		}
		th-=par[to][rem]-par[nd][rem];
	}
	tr(it,adj[nd]){
		if(th<=dfs(nd+1+it->ss,rem-it->ss)){
			if(it->ss)cur.pb(mp(nd,nd+it->ss));
			return rec(nd+1+it->ss,rem-it->ss,th,pos);
		}
		else th-=dfs(nd+1+it->ss,rem-it->ss);
	}return -1;
}
int main(){
//	freopen("file.in","r",stdin);
	int t;
	scanf("%d",&t);
	while(t--){
		memset(dp,-1,sizeof dp);
		scanf("%d%d%d",&n,&c,&q);
		for(int i=0;i<n;i++)scanf("%d",arr+i);
		for(int i=0;i<n;i++){
			adj[i].clear();
			for(int j=0;j<=c;j++)
				if(i+j<n)
					adj[i].pb(mp(arr[i+j],j));
			sort(all(adj[i]));
		}
		for(int j=0;j<=c;j++)
			for(int i=n;i>=0;i--){
				par[i][j]=par[i+1][j];
				tr(it,adj[i]){
					if(it->ss==0)break;
					par[i][j]=min(B,par[i][j]+dfs(i+it->ss+1,j-it->ss));
				}	
			}
		while(q--){
			ll k;int a;
			scanf("%d%lld",&a,&k);
			printf("%d\n",rec(0,c,k,a-1));	
		}
	}
	return 0;
}