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;
const int N=30050;

int t,n,c,q;
unsigned long long a[N][5],presum[N][5],nxtsum[N][5];
int p[N],ch[N][6];
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d%d",&n,&c,&q);
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&p[i]);
			a[i][0]=1;
			ch[i][0]=0;
		}
		for(int j=0;j<=c;j++) a[n+1][j]=1;
		for(int j=1;j<=c;j++)
		{
			for(int i=n;i>=1;i--)
			{
				a[i][j]=0;
				for(int k=0;k<=j&&i+k<=n;k++)
					a[i][j]+=a[i+k+1][j-k];
				assert(a[i][j]<=1e18);
			}
		}

		pair<int,int> temp[6];
		for(int i=1;i<=n;i++)
		{
			temp[0].first=0;
			for(int j=0;j<=c&&i+j<=n;j++)
				temp[++temp[0].first]=make_pair(p[i+j],j);
			sort(temp+1,temp+temp[0].first+1);
			ch[i][0]=temp[0].first;
			memcpy(presum+i,presum+i-1,5*sizeof(unsigned long long));
			memcpy(nxtsum+i,nxtsum+i-1,5*sizeof(unsigned long long));
			bool flag=false;
			for(int j=1;j<=temp[0].first;j++)
			{
				ch[i][j]=temp[j].second;
				if(ch[i][j]==0) {flag=true;continue;}
				if(!flag)
				{
					for(int k=ch[i][j];k<=c;k++)
						presum[i][k]+=a[i+ch[i][j]+1][k-ch[i][j]];
				}
				else
				{
					for(int k=ch[i][j];k<=c;k++)
						nxtsum[i][k]+=a[i+ch[i][j]+1][k-ch[i][j]];
				}
			}
		}

		while(q--)
		{
			int x;
			unsigned long long y;
			scanf("%d%llu",&x,&y);
			vector<pair<int,int> > v;
			int pos=1,nowc=c;
			if(y>a[1][c]) {puts("-1");continue;}
			while(pos<=n)
			{
				if(nowc==0||presum[n][nowc]-presum[pos-1][nowc]+1==y) break;
				else if(presum[n][nowc]-presum[pos-1][nowc]>=y)
				{
					int l=pos,r=n;
					while(l<r)
					{
						int mid=(l+r)>>1;
						if(presum[mid][nowc]-presum[pos-1][nowc]>=y) r=mid;
						else l=mid+1;
					}
					y-=presum[l-1][nowc]-presum[pos-1][nowc];
					pos=l;
					for(int i=1;i<=ch[pos][0];i++)
						if(nowc<ch[pos][i]) continue;
						else if(a[pos+ch[pos][i]+1][nowc-ch[pos][i]]<y)
							y-=a[pos+ch[pos][i]+1][nowc-ch[pos][i]];
						else
						{
							v.push_back(make_pair(pos,ch[pos][i]));
							nowc-=ch[pos][i];
							pos+=ch[pos][i]+1;
							break;
						}
				}
				else
				{
					y-=presum[n][nowc]-presum[pos-1][nowc]+1;
					int l=pos,r=n+1;
					while(l<r)
					{
						int mid=(l+r)>>1;
						if(nxtsum[n][nowc]-nxtsum[mid-1][nowc]<y) r=mid;
						else l=mid+1;
					}
					y-=nxtsum[n][nowc]-nxtsum[l-1][nowc];
					pos=l-1;
					bool flag=false;
					for(int i=1;i<=ch[pos][0];i++)
						if(ch[pos][i]==0) flag=true;
						else if(flag)
						{
							if(nowc<ch[pos][i]) continue;
							else if(a[pos+ch[pos][i]+1][nowc-ch[pos][i]]<y)
								y-=a[pos+ch[pos][i]+1][nowc-ch[pos][i]];
							else
							{
								v.push_back(make_pair(pos,ch[pos][i]));
								nowc-=ch[pos][i];
								pos+=ch[pos][i]+1;
								break;
							}
						}
				}
			}

			int ans=p[x];
			for(auto u:v)
			{
				if(x>=u.first&&x<=u.first+u.second)
					ans=p[u.first+u.first+u.second-x];
			}
			printf("%d\n",ans);
		}
	}
	return 0;
}