#pragma GCC optimize("Ofast", "unroll-loops") #include using namespace std; using ll = long long; int N, P; ll K; vector A, B; void input(void){ cin >> N >> K >> P; A.resize(N); for (int& ai : A) cin >> ai; B.resize(N); for (int& bi : B) cin >> bi; sort(A.begin(), A.end()); sort(B.begin(), B.end()); } int _count_B(int l, int r){ if (r <= l) return 0; auto l_iter = lower_bound(B.begin(), B.end(), l); auto r_iter = lower_bound(B.begin(), B.end(), r); return (r_iter - l_iter); } int count_B(int ai, int v){ return (_count_B(0, v - ai + 1) + _count_B(P - ai, P + v - ai + 1)); } ll count_v(int v){ ll ret = 0; for (int ai : A) ret += count_B(ai, v); return ret; } int solve(void){ int l = -1, r = 2 * P - 2; while (r - l > 1){ int mid = (l + r) / 2; if (count_v(mid) < K) l = mid; else r = mid; } return r; } int main(void){ input(); cout << solve() << endl; return 0; }