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;
#define int long long
int read(){
	int a=0,fh=1;char c=getchar();
	while(c>'9'||c<'0'){if(c=='-')fh=-1;c=getchar();}
	while('0'<=c&&c<='9'){
		a=a*10+c-48;
		c=getchar();
	}
	return a*fh;
}
#define MN 30005
#define pii pair<int,int>
#define mp make_pair
#define x first
#define y second
int T,n,m,c,q;
int p[MN];
int f[MN][5],sum[MN][5];//sum:前面维持原状的花费
int g[MN][5],h[MN][5];//g:保持 h:刚好超过
vector<pii >ans,W[MN][5];
void solve(int st,int i,int j,int c){
	if(st>i)return;
	if(f[n][c]<j)return;
	int l=st-1,r=n+1;
	while(l+1<r){
		int mid=(l+r)>>1;	
		int now=j-sum[mid-1][c]+sum[st-1][c],use=0,ok=0;//ok：now用得完
		if(now<1){r=mid;continue;}
		if(now>g[mid][c]&&now<=h[mid][c]){l=mid;continue;}
		for(auto x:W[mid][c]){
			use=x.y;
			if(now<=f[n-(mid+x.y)][c-x.y]){ok=1; break;}
			now-=f[n-(mid+x.y)][c-x.y];	
		}
		if(ok&&use){
			if(use)ans.push_back(mp(mid,mid+use));
			solve(mid+use+1,i,now,c-use);
			return;
		}
		if(!ok)r=mid;
		else l=mid;
	}
	assert(r==n+1);
}
signed main(){
	T=read();
	for(int i=0;i<=4;++i)f[0][i]=1;
	for(int i=1;i<=30000;++i)
		for(int j=0;j<=4;++j){
			for(int k=0;k<=j&&k<i;++k){
				f[i][j]=(f[i][j]+f[i-k-1][j-k]);
			}
		}
	while(T--){
		n=read();c=read();q=read();
		for(int i=1;i<=n;++i)p[i]=read();
		for(int mid=1;mid<=n;++mid){	
			vector<pii> w;
			for(int k=0;k<=c&&mid+k<=n;++k){
				w.push_back(mp(p[mid+k],k));
			}
			sort(w.begin(),w.end());
			for(int k=0;k<=c;++k){
				W[mid][k].clear();	
				g[mid][k]=h[mid][k]=0;
				int ok=0;
				for(auto i:w){
					if(i.y<=k){
						W[mid][k].push_back(i);
						if(i.y==0){
							ok=1;
							h[mid][k]+=f[n-mid-i.y][k-i.y];
						}
						if(!ok){
							g[mid][k]+=f[n-mid-i.y][k-i.y];
							h[mid][k]+=f[n-mid-i.y][k-i.y];
						}
					}
				}
			}
		}
		for(int i=1;i<=n;++i)
			for(int j=1;j<=c;++j){
				sum[i][j]=sum[i-1][j];
				for(int k=1;k<=j&&i+k<=n;++k)
					if(p[i]>p[i+k]){
						sum[i][j]+=f[n-i-k][j-k];	
					}
			}
		while(q--){
			int i=read(),j=read();
			if(f[n][c]<j){puts("-1");continue;}
			ans.clear();
			solve(1,i,j,c);
			bool ok=0;
			for(auto w:ans){
				if(w.x<=i&&i<=w.y){
					printf("%lld\n",p[w.y-(i-w.x)]);
					ok=1;
				}
			}
			if(!ok)printf("%lld\n",p[i]);
		}
	}
	return 0;
}