二分+尺取
//给一个长度为n的数组a,取一个子区间的第k大。
//把所有子区间的第k大放入b数组,求b数组的第m大。
ll check(int x){
int l=0,r=-1,cnt=0;
ll sum=0;
while(r<n){
if(cnt<k){
r++;
if(a[r]>=x) cnt++;
}
else{
sum+=(n-r);
if(a[l]>=x) cnt--;
l++;
}
}
return sum;
}
int main(){
int T;
cin>>T;
while(T--){
cin>>n>>k>>m;
for(int i=0;i<n;i++) cin>>a[i],b[i]=a[i];
sort(b,b+n);
int l=0,r=n-1;
ll ans;
while(l<=r){
int mid=(l+r)>>1;
int t=b[mid];
if(check(t)>=m){
ans=t; //最大的那个才恰好是答案
l=mid+1;
}
else
r=mid-1;;
}
cout<<ans<<endl;
}
return 0;
}