#include<stdio.h>
#include<stdlib.h>
int ** info, ** buf;
void
swap(int * * info,int i){
int *temp;
temp=info[i];
info[i]=info[i-1];
info[i-1]=temp;
}
void
maopao(int ** info,int len){
int i,j,flag;
for(i=0;i<len-1;i=flag){
flag=len-1;
for(j=len-1;j>i;j--){
if(info[j][1]> info[j-1][1] || (info[j-1][0]>info[j][0] && info[j][1]==info[j-1][1])){
swap(info,j);
flag=j;
}
}
}
}
void
merge(int l,int r){
int mid,i,j,k;
if(l>=r)
return ;
mid=(l+r)>>1;
merge(l,mid);
merge(mid+1,r);
i=k=l,j=mid+1;
while(i<=mid && j<=r){
if(info[i][1]>info[j][1] || (info[i][1]==info[j][1] && info[i][0]<info[j][0])){
buf[k++]=info[i++];
}else{
buf[k++]=info[j++];
}
}
while(i<=mid)
buf[k++]=info[i++];
while(j<=r)
buf[k++]=info[j++];
for(i=l;i<=r;i++){
info[i]=buf[i];
}
}
/*
应该是冒泡太慢了,过不了,优化也没用,
看来给的数据应该是随机的,快排什么的,,,又懒得写,,,
过了三个,开O2优化过了5个,,,
【更新】尼玛,,,归并也超时了,,,这说明不完全是冒泡的原因,下面
那种写法是不行的,有点难以理解,,,
*/
int
main(){
int N,R,Q,i,j;
scanf("%d%d%d",&N,&R,&Q);
info=malloc(sizeof(int *)*2*N);
buf=malloc(sizeof(int *)*2*N);
for(i=0;i<2*N;i++){
info[i]=malloc(sizeof(int)*3);
info[i][0]=i+1;
scanf("%d",info[i]+1);
}
for(i=0;i<2*N;i++){
scanf("%d",info[i]+2);
}
// maopao(info,2*N);
merge(0,2*N-1);
while(R--){
/*每一轮胜利者加一,失败者不变,
所以只要把胜利者往上面提就可以了,一般而言,不会提太多次。不必每轮都来一次排序,很多题解
都是划分成两个降序集合来归并排序,我感觉没有必要。
*/
i=0;
while(i<2*N){
j=i;
if(info[i][2]<info[i+1][2]){
i+=1;
}
info[i][1]+=1;
while(i!=0 && (info[i-1][1]< info[i][1] || (info[i-1][0]>info[i][0] && info[i-1][1]==info[i][1]))){
swap(info,i);
i--;
}
i=j+2;
}
}
printf("%d",info[Q-1][0]);
return 0;
}