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 mz 1000000007
using namespace std;

pair<long long,long long> pp;
vector <pair<long long,long long> > vb[30005],vs[30005];
long long p[30005];
long long c[30005][10],s[30005][10];
long long bg[30005][10],sm[30005][10],sumb[30005][10],sums[30005][10];
long long y,wtf;
long long n,k,x,z,now;

void go(long long l)
{
    if(now==0 || l>x || y==0)
        return;
    long long lp=l-1,r=n-1,mid;
    if(y>sums[n-1][now]-sums[lp][now])
    {
        y-=(sums[n-1][now]-sums[lp][now]);
        y--;
        if(y==0)
            return ;
        while(l!=r)
        {
            mid=(l+r)/2;
            if(sumb[n-1][now]-sumb[mid][now]>=y)
                l=mid+1;
            else
                r=mid;
        }
        y-=sumb[n-1][now]-sumb[l][now];
        for(long long i=0;i<vb[l].size();i++)
        {
            if(now<vb[l][i].second-l)
                continue;
            if(y<=s[n-vb[l][i].second][now-(vb[l][i].second-l)])
            {
                if((l<=x) && (vb[l][i].second>=x))
                {
                    z=p[vb[l][i].second-(x-l)];
                }
                now-=(vb[l][i].second-l);
                go(vb[l][i].second+1);
                return ;
            }
            else
                y-=s[n-vb[l][i].second][now-(vb[l][i].second-l)];
        }
    }
    else
    {
        while(l!=r)
        {
            mid=(l+r)/2;
            if((sums[mid][now]-sums[lp][now])>=y)
                r=mid;
            else
                l=mid+1;
        }
        y-=sums[l-1][now]-sums[lp][now];
        for(long long i=0;i<vs[l].size();i++)
        {
            if(now<vs[l][i].second-l)
                continue;
            if(y<=s[n-vs[l][i].second][now-(vs[l][i].second-l)])
            {
                if((l<=x) && (vs[l][i].second>=x))
                {
                    z=p[vs[l][i].second-(x-l)];
                }
                now-=(vs[l][i].second-l);
                go(vs[l][i].second+1);
                return ;
            }
            else
                y-=s[n-vs[l][i].second][now-(vs[l][i].second-l)];
        }
    }
}

signed main()
{
    c[1][0]=c[0][0]=1;
    for(long long j=0;j<=4;j++)
        s[1][j]=s[0][j]=1;
    for(long long i=2;i<=30000;i++)
    {
        c[i][0]=s[i][0]=1;
        for(int j=1;j<=4;j++)
        {
            c[i][j]=c[i-1][j-1]+c[i-1][j];
            s[i][j]=s[i][j-1]+c[i][j];
        }
    }
    long long t,q;
    scanf("%lld",&t);
    while(t--)
    {
        scanf("%lld%lld%lld",&n,&k,&q);
        for(long long i=1;i<=n;i++)
            scanf("%lld",&p[i]);
        for(long long i=1;i<n;i++)
        {
            vs[i].clear();
            vb[i].clear();
            for(long long j=1;j<=k;j++)
                bg[i][j]=sm[i][j]=0;
            for(long long j=i+1;j<=n && j-i<=k;j++)
            {
                pp.first=p[j];
                pp.second=j;
                if(p[j]<p[i])
                {
                    vs[i].push_back(pp);
                    for(int l=j-i;l<=k;l++)
                        sm[i][l]+=s[n-j][l-(j-i)];
                }
                else
                {
                    vb[i].push_back(pp);
                    for(int l=j-i;l<=k;l++)
                        bg[i][l]+=s[n-j][l-(j-i)];

                }
            }
            sort(vs[i].begin(),vs[i].end());
            sort(vb[i].begin(),vb[i].end());
            for(int j=1;j<=k;j++)
            {
                sumb[i][j]=sumb[i-1][j]+bg[i][j];
                sums[i][j]=sums[i-1][j]+sm[i][j];
            }
        }
        wtf=sumb[n-1][k]+1+sums[n-1][k];
        while(q--)
        {
            scanf("%lld%lld",&x,&y);
            if(y>wtf)
                z=-1;
            else
            {
                z=p[x];
                now=k;
                go(1);
            }
            printf("%lld\n",z);
        }
    }
    return 0;
}
