import bisect from functools import cache N,K,P = list(map(int,input().split())) A = list(map(int,input().split())) B = list(map(int,input().split())) A.sort() B.sort() memo_l = [-1 for _ in range(P+1)] def memo_bisect_left(p): if(p >= P):return N if(p < 0):return 0 if(memo_l[p] != -1):return memo_l[p] memo_l[p] = bisect.bisect_left(B,p) return memo_l[p] memo_r = [-1 for _ in range(P)] def memo_bisect_right(p): if(p >= P):return N if(p < 0):return 0 if(memo_r[p] != -1):return memo_r[p] memo_r[p] = bisect.bisect_right(B,p) return memo_r[p] def check(n): count = 0 for i in A: left = memo_bisect_left(P-i) right = memo_bisect_right(n+P-i) count += right - left right2 = memo_bisect_right(n-i) count += right2 return count >= K ng,ok = -1,P-1 while(ok - ng > 1): mid = (ok+ng)//2 if(check(mid)): ok = mid else: ng = mid print(ok)