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;
#define int long long
const int nax=3e5+100;
void solve()
{
    int n,c,q;
    cin>>n>>c>>q;
    vector<int> a(n);
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        --a[i];
    }
    vector<vector<int>> dp(n+1,vector<int>(c+1));
    for(int i=0;i<=c;i++)
    dp[n][i]=1;//base case          
    //it takes one cost either we rotate or not
    for(int i=n-1;i>=0;i--)
    for(int j=0;j<=c;j++)
    for(int k=0;k<=j and i+k<n;k++)
    dp[i][j]+=dp[i+k+1][j-k];
    vector<vector<int>> order(n);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<=c and i+j<n;j++)
        order[i].push_back(j);
        sort(order[i].begin(),order[i].end(),[&](int x,int y){
            return a[i+x]<a[i+y];
        });
    }
    vector<vector<vector<int>>> l(n),r(n);
    int lg=__lg(n);
    for(int i=0;i<n;i++)
    {
        l[i].assign(c+1,vector<int>(lg+1));
        r[i].assign(c+1,vector<int>(lg+1));
    }
    for(int i=n-1;i>=0;i--)
    for(int j=0;j<=c;j++)
    {
        int ans=0;
        for(auto x:order[i])
        {
            if(x>j)
            continue;
            if(x==0)
            break;
            ans+=dp[i+x+1][j-x];
        }
        l[i][j][0]=ans;
        r[i][j][0]=ans+dp[i+1][j];
        for(int k=1;i+(1<<k)<=n;k++)
        {
            l[i][j][k]=l[i][j][k-1]+l[i+(1<<(k-1))][j][k-1];//for every 2^k indexes
            r[i][j][k]=r[i][j][k-1]+r[i+(1<<(k-1))][j][k-1];
        }
    }
    while(q--)
    {
        int pos,val;
        cin>>pos>>val;
        --pos;
        --val;
        int i=0,rr=c;
        int ans=a[pos];
        if(val>=dp[0][c])
        {
            cout<<"-1\n";
            continue;
        }
        while(i<n)
        {
            for(int j=lg;j;j--)
            {
                if(i+(1LL<<j)<=n and l[i][rr][j]<=val and val<r[i][rr][j])
                {
                    val-=l[i][rr][j];
                    i+=(1LL<<j);
                }
            }
            if(i==n)
            break;
            for(auto x:order[i])
            {
                if(x>rr)
                continue;
                if(val>=dp[i+x+1][rr-x])
                val-=dp[i+x+1][rr-x];
                else
                {
                    int i1=i+x;
                    if(i<=pos and pos<=i1)
                    ans=a[i+i1-pos];
                    i+=x+1;
                    rr-=x;
                    break;
                }
            }
        }
        cout<<ans+1<<'\n';
    }
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr);
    cout.tie(nullptr);
    //precompute();
    int t=1;
    cin>>t;
    while(t--)
    solve();
    return 0;
}