#ifdef __LOCAL #define _GLIBCXX_DEBUG #endif #include using namespace std; using ll = long long; using P = pair; using PIL = pair; using PLI = pair; using PLL = pair; template bool chmin(T &a, T b) {if(a>b){a=b;return 1;}return 0;} template bool chmax(T &a, T b) {if(a void show_vec(T v) {for (int i=0;i void show_pair(T p) {cout< bool judge_digit(T bit,T i) {return (((bit&(1LL< h_idx4 = {-1, 0,0,1}; const vector w_idx4 = { 0,-1,1,0}; const vector h_idx8 = {-1,-1,-1, 0,0, 1,1,1}; const vector w_idx8 = {-1, 0, 1,-1,1,-1,0,1}; ll n,k,p; vector a,b; bool under_num_isOK(int index, ll key, vector &vec){ if (vec[index] <= key) return true; else return false; } // 二分探索をする ll under_num(ll key,vector &vec){ int ng = vec.size(); int ok = -1; while (abs(ok - ng) > 1){ int mid = (ok + ng) / 2; if (under_num_isOK(mid, key, vec)) ok = mid; else ng = mid; } return ll(ok + 1); } bool Binary_Search_isOK(ll x){ ll cnt = 0; for (int i = 0; i < n; i++){ if (x >= b[i]){ if (x - b[i] >= p - b[i]) cnt += n; else{ cnt += under_num(x - b[i],a); cnt += (n - under_num(p - b[i] - 1,a)); } } else{ cnt += under_num(p + x - b[i],a) - under_num(p - b[i] - 1,a); } } // cout << x << " " << cnt << endl; if (cnt >= k) return true; else return false; } // 二分探索をする ll Binary_Search(){ ll ng = -1; ll ok = p; while (abs(ok - ng) > 1){ ll mid = (ok + ng) / 2; if (Binary_Search_isOK(mid)) ok = mid; else ng = mid; } return ok; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(15); cin >> n >> k >> p; a.resize(n); for (int i = 0; i < n; i++){ cin >> a[i]; } b.resize(n); for (int i = 0; i < n; i++){ cin >> b[i]; } sort(a.begin(), a.end()); sort(b.begin(), b.end()); cout << Binary_Search() << endl; }