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 F first
#define S second
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<int,int>pi;
const int maxn=30005;
const int L=100;
ll cnt[maxn][5],l[maxn][5],r[maxn][5],sl[maxn][5],sr[maxn][5];
int _,n,p[maxn],m,q;
void solve(){
    scanf("%d%d%d",&n,&m,&q);
    for (int i=1;i<=n;i++) scanf("%d",&p[i]);
	for (int j=0;j<=m;j++) cnt[n+1][j]=1;
	for (int i=n;i;i--){
        for (int j=0;j<=m;j++){
            cnt[i][j]=cnt[i+1][j];
            for (int k=1;k<=j;k++)
				if (i+k<=n) cnt[i][j]+=cnt[i+k+1][j-k];
        }
	}

	for (int i=1;i<=n;i++)
	for (int j=0;j<=m;j++){
        ll x=0,y=0;
		for (int w=1;w<=j&&i+w<=n;w++){
			if (p[i+w]<p[i]) x+=cnt[i+w+1][j-w];
			else y+=cnt[i+w+1][j-w];
        }
        l[i][j]=x;
        r[i][j]=y;
        sl[i][j]=sl[i-1][j]+x;
        sr[i][j]=sr[i-1][j]+y;
	}
	while (q--){
		ll t; int pos,now,cost;
		scanf("%d%lld",&pos,&t);
		if (t>cnt[1][m]){puts("-1");continue;}
		now=1; cost=m;
		while (now<=pos){
            if (t>l[now][cost]&&t<=cnt[now][cost]-r[now][cost]){
				int L=now,R=n+1;
				while (R-L>1){
					int mid=(L+R)>>1;
					ll u=sl[mid][cost]-sl[now-1][cost];
					ll v=sr[mid][cost]-sr[now-1][cost];
					if (t>u&&t<=cnt[now][cost]-v) L=mid; else R=mid;
				}
				t-=sl[L][cost]-sl[now-1][cost];now=R;
				if (now>pos) printf("%d\n",p[pos]);
            } else {
				vector<pi> A; A.clear();
				for (int i=0;i<=cost&&i+now<=n;i++)
					A.pb((pi){p[i+now],i});
				sort(A.begin(),A.end());
				for (auto x:A){
					ll cc=cnt[x.S+now+1][cost-x.S];
					if (t<=cc) {
						if (pos>=now&&pos<=now+x.S){
                            printf("%d\n",p[now+now+x.S-pos]);
						}
						now+=x.S+1;
						cost-=x.S;
                        break;
					}
					t-=cc;
				}
            }
		}
	}
}
int main(){
    scanf("%d",&_);
    while (_--) solve();
    return 0;
}
