inline int min(int a,int b){return a<b?a:b;}
const int INF=0x3f3f3f3f;
const int *wa,*wb,*wc;
int na,nb,nc;
inline int get_a(int p){return p<na?wa[p]:INF;}
inline int get_b(int p){return p<nb?wb[p]:INF;}
inline int get_c(int p){return p<nc?wc[p]:INF;}
int query(int x,int y,int z,int k){
// printf("query %d %d %d %d\n",x,y,z,k);
int l=k/3;
int a=get_a(x+l),b=get_b(y+l),c=get_c(z+l),w=min(min(a,b),c);
if (!l){
if (k==0)
return w;
if (k==1){
if (w==a)
return min(get_a(x+1),min(b,c));
else if (w==b)
return min(get_b(y+1),min(a,c));
else return min(get_c(z+1),min(a,b));
}
if (k==2){
if (w==a)
x++,a=get_a(x);
else if (w==b)
y++,b=get_b(y);
else z++,c=get_c(z);
w=min(min(a,b),c);
// printf("%d %d %d\n",x,y,z);
if (w==a)
return min(get_a(x+1),min(b,c));
else if (w==b)
return min(get_b(y+1),min(a,c));
else return min(get_c(z+1),min(a,b));
}
// puts("WTF");
}
if (w==a)
x+=l;
else if (w==b)
y+=l;
else z+=l;
return query(x,y,z,k-l);
}
int query_kth(const int *qa, int n_a, const int *qb, int n_b, const int *qc, int n_c, int k)
{
wa=qa,wb=qb,wc=qc;
na=n_a,nb=n_b,nc=n_c;
return query(0,0,0,k-1);
}