n,k,p=map(int,input().split()) a=list(map(int,input().split())) b=list(map(int,input().split())) a.sort() b.sort() ####二分探索################################### #配列は昇順にソートずみ def bilower(a,x): # a[i]<=x となる最大のiを返す ない時は-1 if len(a)==0:return -1 mi=0 ma=len(a)-1 if a[0]>x:return -1 if a[ma]<=x:return ma while ma-mi>1: mid=(ma+mi)//2 if a[mid]<=x:mi=mid else:ma=mid return mi def bihigher(a,x): # a[i]>=x となる最小のiを返す ない時は len(a) if len(a)==0:return 0 mi=0 ma=len(a)-1 if a[ma]=x:return 0 while ma-mi>1: mid=(ma+mi)//2 if a[mid]>=x:ma=mid else:mi=mid return ma def birange(a,l,r): #l<=a[i]<=r となるiの個数を返す left=bihigher(a,l) right=bilower(a,r) return right-left+1 ################################################ def f(x): res=0 for i in range(n): res+=birange(b,-a[i],x-a[i]) res+=birange(b,p-a[i],x+p-a[i]) return res if f(0)>=k: print(0) exit() ng=0 ok=p-1 while ok-ng>1: mid=(ok+ng)//2 if f(mid)>=k:ok=mid else:ng=mid print(ok)