import sys def main(): input = sys.stdin.read().split() idx = 0 N = int(input[idx]); idx +=1 K = int(input[idx]); idx +=1 P = int(input[idx]); idx +=1 A = list(map(int, input[idx:idx+N])) idx += N B = list(map(int, input[idx:idx+N])) idx += N # Preprocess B cnt_B = [0] * P for b in B: cnt_B[b] += 1 # Compute prefix sums prefix_B = [0] * P prefix_B[0] = cnt_B[0] for i in range(1, P): prefix_B[i] = prefix_B[i-1] + cnt_B[i] # Binary search low = 0 high = P - 1 answer = high while low <= high: mid = (low + high) // 2 total = 0 for a in A: L = (-a) % P R = (mid - a) % P if L <= R: if L == 0: current = prefix_B[R] else: current = prefix_B[R] - prefix_B[L-1] total += current else: # L > R, count from L to P-1 and from 0 to R part1 = prefix_B[P-1] if L > 0: part1 -= prefix_B[L-1] part2 = prefix_B[R] total += part1 + part2 # Early exit if total exceeds K if total > K: break if total >= K: answer = mid high = mid - 1 else: low = mid + 1 print(answer) if __name__ == '__main__': main()