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 ci const int&
#define TOT(tc,ql,qr) ((qr>=0?s[qr][tc]:0)-(ql>0?s[ql-1][tc]:0))
using namespace std;
struct elem{
	int l,r;
	long long num;
};
int T,n,C,Q,p[30010],li[30010][5],ri[30010][5],l,r,mid,qi,nc,ni,opl[5],opr[5],sz;
long long qj,s[120010][5];
vector<elem>L[5],tl[30010][5],tr[30010][5];
bool cmp(elem x,elem y){
	return p[x.r]<p[y.r];
}
long long NUM(ci x,ci op){
	if(op==0)return 1;
	if(x<op)return 0;
	if(op==1)return x;
	if(op==2)return x*(x-1)>>1;
	if(op==3)return 1ll*x*(x-1)*(x-2)/6;
	return 1ll*x*(x-1)*(x-2)*(x-3)/24;
}
long long Calc(ci x,ci op){
	long long ret=0;
	for(int i=0;i<=op;++i)ret+=NUM(x-1,i);
	return ret;
}
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%d%d",&n,&C,&Q);
		for(int i=1;i<=4;++i)vector<elem>().swap(L[i]),ri[n+1][i]=0;
		for(int i=1;i<=n;++i){
			scanf("%d",&p[i]);
			for(int j=1;j<=C;++j)vector<elem>().swap(tl[i][j]),vector<elem>().swap(tr[i][j]);
		}
		for(int c=1;c<=C;++c){
			tl[n][c].push_back((elem){n+1,n+1,1});
			for(int i=n-1;i>=1;--i){
				for(int j=i+1;j<=i+c&&j<=n;++j)p[j]<p[i]?tl[i][c].push_back((elem){i,j,Calc(n-j,c-(j-i))}):tr[i][c].push_back((elem){i,j,Calc(n-j,c-(j-i))});
				if(tl[i][c].size())sort(tl[i][c].begin(),tl[i][c].end(),cmp);
				if(tr[i][c].size())sort(tr[i][c].begin(),tr[i][c].end(),cmp);
				li[i+1][c]=tl[i][c].size(),ri[i+1][c]=li[i+1][c]+ri[i+2][c]+tr[i+1][c].size();
			}
			li[1][c]=0,ri[1][c]=ri[2][c]+tr[1][c].size();
			for(int i=2;i<=n;++i)li[i][c]+=li[i-1][c],ri[i][c]+=li[i-1][c];
			for(int i=1;i<=n;++i)for(int j=0;j<tl[i][c].size();++j)L[c].push_back(tl[i][c][j]);
			for(int i=n;i>=1;--i)for(int j=0;j<tr[i][c].size();++j)L[c].push_back(tr[i][c][j]);
			s[0][c]=L[c][0].num;
			for(int i=1;i<L[c].size();++i)s[i][c]=s[i-1][c]+L[c][i].num;
		}
		while(Q--){
			scanf("%d%lld",&qi,&qj),nc=C,sz=0,ni=1;
			if(qj>Calc(n,C)){
				puts("-1");
				goto Skip;
			}
			while(nc&&ni<=n){
				l=li[ni][nc],r=ri[ni][nc];
				while(l<r)mid=l+r>>1,TOT(nc,li[ni][nc],mid)>=qj?r=mid:l=mid+1;
				++sz,qj-=TOT(nc,li[ni][nc],l-1),opl[sz]=L[nc][l].l,opr[sz]=L[nc][l].r,ni=opr[sz]+1,nc-=L[nc][l].r-L[nc][l].l;
			}
			for(int i=1;i<=sz;++i)if(opl[i]<=qi&&qi<=opr[i]){
				printf("%d\n",p[opl[i]+opr[i]-qi]);
				goto Skip;
			}
			printf("%d\n",p[qi]);
			Skip:;
		}
	}
	return 0;
}