思路:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define LL long long
using namespace std;
#define N 100010
int p[N],c[N];
int n, m, pos;
int main(){
freopen("work.in","r",stdin);
freopen("work.out","w",stdout);
scanf("%d%d%d", &n, &m, &pos);
for(int i=1; i<=n; i++) scanf("%d", &p[i]);
for(int i=1; i<=m; i++) scanf("%d", &c[i]);
sort(p+1, p+1+n);
sort(c+1, c+1+m);
LL l=0, r=2000000000ll, mid;
while(l < r){
bool flag = true;
int cur = 1;
mid = (l + r) >> 1;
for(int i=1; i<=n; i++){
LL delt = (mid - abs(pos - p[i]));
if(delt < 0) { flag = false; break;}
delt /= 2;
LL L = min(pos - delt, p[i] - delt);
LL R = max(pos + delt, p[i] + delt);
while(c[cur]<L && cur<=m) cur++;
if(cur > m) { flag = false; break;}
if(c[cur] > R) { flag = false; break;}
cur++;
}
if( flag ) r = mid;
else l = mid + 1;
}
cout << l << endl;
return 0;
}