#include using namespace std; #define rep(i,n) for(int i=0; i P; typedef long long ll; const int INF = 1001001001; const ll INFL = 1e17; const int MOD = 1e+9+7; int main(){ int n, p; ll k; cin >> n >> k >> p; vector a(n),b(n); rep(i,n) cin >> a[i]; rep(i,n) cin >> b[i]; sort(b.begin(),b.end()); int left = -1, right = p; while(right-left > 1){ int mid = (right+left) / 2; ll cnt = 0; rep(i,n){ int tar = p-a[i]; int l = -1, r = n; while(r-l > 1){ int m = (r+l) / 2; if(tar <= b[m]) r = m; else l = m; } int l1 = -1, r1 = l+1; while(r1-l1 > 1){ int m1 = (r1+l1) / 2; if(mid < b[m1]+a[i]) r1 = m1; else l1 = m1; } cnt += r1; int l2 = r-1, r2 = n; while(r2-l2 > 1){ int m2 = (r2+l2) / 2; if(mid < (b[m2]+a[i])%p) r2 = m2; else l2 = m2; } cnt += r2-r; } if(k <= cnt) right = mid; else left = mid; } cout << right << endl; return 0; }