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<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#define N_ 30100
using namespace std;
using pii = pair<int,int>;
int n, K, Q, w[N_], Tw[N_];
long long D[5][N_], P[N_], U[5][N_], S[5][N_];
void Solve(){
    int i, j, k;
    scanf("%d%d%d",&n,&K,&Q);
    for(i=1;i<=n;i++){
        scanf("%d",&w[i]);
    }
    for(i=0;i<=4;i++){
        for(j=0;j<=n;j++){
            U[i][j]=D[i][j]=S[i][j]=0;
        }
    }
    for(i=0;i<=K;i++)U[i][0]=1;
    for(i=1;i<=n;i++){
        for(j=0;j<=K;j++)U[j][i]=U[j][i-1];
        for(j=1;j<=K && j<i;j++){
            for(k=j;k<=K;k++){
                U[k][i] += U[k-j][i-j-1];
                U[k][i] = U[k][i];
            }
        }
    }
    for(i=1;i<=K;i++){
        for(j=1;j<=n;j++){
            for(k=1;k<=i && j+k<=n;k++){
                if(w[j+k] < w[j]){
                    D[i][j] += U[i-k][n-(j+k)];
                    D[i][j] = D[i][j];
                }
            }
        }
    }
    for(i=1;i<=K;i++){
        for(j=1;j<=n;j++){
            S[i][j]=S[i][j-1]+D[i][j];
            //if(j%100==0)printf("%lld\n",U[i][j]);
        }
        //puts("");
    }
    while(Q--){
        int loc;
        long long M;
        scanf("%d%lld",&loc,&M);
        if(M > U[K][n]){
            puts("-1");
            continue;
        }
        int ed = 0, TK = K;
        while(1){

            int bb = ed+1, ee = n, rr = ed;
            while(bb<=ee){
                int m = (bb+ee)>>1;
                long long sm = S[TK][m] - S[TK][ed];
                long long dd = U[TK][n-m];
                if(sm < M && sm + dd >= M){
                    rr = m;
                    bb = m+1;
                }
                else{
                    ee = m-1;
                }
            }

            if(loc <= rr){
                printf("%d\n",w[loc]);
                break;
            }

            M -= (S[TK][rr] - S[TK][ed]);
            int pv = rr+1;

            vector<pii>ZZ;
            for(i=0;i<=TK && pv+i <=n;i++){
                ZZ.push_back({w[pv+i],i});
            }
            sort(ZZ.begin(),ZZ.end());
            int fin = 0;
            for(auto &t : ZZ){
                int l = t.second;
                if(M <= U[TK-l][n-(pv+l)]){
                    for(i=pv;i<=pv+l;i++)Tw[i]=w[i];
                    reverse(Tw+pv,Tw+pv+l+1);
                    if(loc <= pv+l){
                        printf("%d\n",Tw[loc]);
                        fin=1;
                        break;
                    }
                    ed = pv+l;
                    TK-=l;
                    break;
                }
                else M-=U[TK-l][n-(pv+l)];
            }
            if(fin)break;
        }
    }
}
int main(){
    int TC;
    scanf("%d",&TC);
    while(TC--){
        Solve();
    }
}