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<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<deque>
#include<vector>
#define pii pair<int,int>
#define fi first
#define se second
#define ll long long
using namespace std;
int n,c,m;
int p[300009],ps[300009];
struct node
{
	ll rk;
	int bg,id;
	bool operator<(const node &p)const{return rk<p.rk;}
};
struct seg
{
	ll rep;
	int l,r,c;
};
vector<node> q[5];
vector<pii> out[300009];
int err[300009];
ll cl[300009][5];
ll lf[300009],rf[300009];
ll cb(int a,int b)
{
	if(a<0||b>a||b<0)
		return 0;
	b=min(b,a-b);
	ll ans=1;
	for(int i=1;i<=b;i++)
		ans*=(a-i+1);
	for(int i=1;i<=b;i++)
		ans/=i;
	return ans;
}
ll cal(int n,int c)
{
	if(n==0)
		return 1;
	ll ans=0;
	for(int i=0;i<=c;i++)
		ans+=cb(n-1,i);
	return ans;
}
void init()
{
	for(int i=0;i<=300000;i++)
		for(int j=0;j<=4;j++)
			cl[i][j]=cal(i,j);
}
void solve()
{
	deque<seg> dq;//remaining leng,remaining c
	for(int i=c;i>=1;i--)
	{
		dq.clear();
		dq.push_back(seg{1,1,0,i});
		lf[n+1]=rf[n+1]=0;
		for(int j=n;j>=1;j--)
		{
			vector<pii> tmp;
			vector<seg> tft;
			lf[j]=lf[j+1];
			rf[j]=rf[j+1];
			for(int k=j;k<=min(n,j+i);k++)
				tmp.push_back(pii(p[k],k));
			int fg=0;
			sort(tmp.begin(),tmp.end());
			for(pii t:tmp)
			{
				if(t.se==j)
					fg=1;
				else if(!fg)
				{
					tft.push_back(seg{cl[n-t.se][i-(t.se-j)],j,t.se,i-(t.se-j)});
					lf[j]-=cl[n-t.se][i-(t.se-j)];
				}
				else
				{
					dq.push_back(seg{cl[n-t.se][i-(t.se-j)],j,t.se,i-(t.se-j)});
					rf[j]+=cl[n-t.se][i-(t.se-j)];
				}
			}
			for(auto it=tft.rbegin();it!=tft.rend();it++)
				dq.push_front(*it);
		}
		// for(seg t:dq)
		// 	printf("rep:%lld l:%d r:%d c:%d\n",t.rep,t.l,t.r,t.c);
		for(auto it=q[i].begin();it!=q[i].end();it++)
		{
			it->rk+=(lf[it->bg]-lf[1]);
			it->bg=1;
		}
		sort(q[i].begin(),q[i].end());
		ll sm=0,lsm=0;
		int lp=-1;
		for(node t:q[i])
		{
			while(lp+1<dq.size()&&sm<t.rk)
			{
				lsm=sm,sm+=dq[++lp].rep;
				// printf("lp:%d sm:%lld\n",lp,sm);
			}
			seg s=dq[lp];
			out[t.id].push_back(pii(s.l,s.r));
			q[s.c].push_back(node{t.rk-lsm,s.r+1,t.id});
		}
	}
}
int main()
{
	init();
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d%d",&n,&c,&m);
		for(int i=0;i<=c;i++)
			q[i].clear();
		for(int i=1;i<=n;i++)
			scanf("%d",p+i);
		ll tot=cl[n][c];
		// printf("tot:%d\n",tot);
		for(int i=1;i<=m;i++)
		{
			err[i]=0;
			out[i].clear();
			int a;
			ll b;
			scanf("%d%lld",&a,&b);
			if(b<=tot)
				q[c].push_back(node{b,1,i});
			else
				err[i]=1;
			ps[i]=a;
		}
		solve();
		for(int i=1;i<=m;i++)
			if(err[i])
				printf("-1\n");
			else
			{
				int s=ps[i];
				// printf("s:%d\n",s);
				for(pii t:out[i])
					if(t.fi<=s&&s<=t.se)
						s=t.fi+t.se-s;
				printf("%d\n",p[s]);
			}
	}
	return 0;
}