#pragma GCC optimize("O3,inline")
#include <bits/stdc++.h>
using namespace std;
#define int long long
int N;
vector<int> A, B, C, negA, negB, negC, sums, a, b;
int idx1, idx2, idx3, idx4, crnt, K;
int clamp(int a, int b, int c) {
return min(max(c, a), b);
}
void process() {
while (idx3 >= 0 && b[idx3] >= a[crnt] - K) idx3--;
while (idx4 >= 0 && b[idx4] > a[crnt] + K) idx4--;
if (crnt == idx1) {
int ub = (idx3 < N + idx1 - idx2 - 1 ? 3 * N : idx1 - idx3 - 1);
int lb = (idx4 < N + idx1 - idx2 - 1 ? 3 * N : idx1 - idx4);
ub = clamp(0, idx1, ub), lb = clamp(1, idx1 + 1, lb);
sums[lb]++, sums[ub + 1]--;
}
else {
int lb = (idx3 < N + idx1 - idx2 - 1 ? -1 : idx2 + idx3 - N + 2);
int ub = (idx4 < N + idx1 - idx2 - 1 ? -1 : idx2 + idx4 - N + 1);
lb = clamp(idx2 - N + 1, N + 1, lb), ub = clamp(idx2 - N, N, ub);
sums[lb]++, sums[ub + 1]--;
}
}
bitset<300005> calc() {
fill(sums.begin(), sums.end(), 0);
idx1 = N, idx2 = N, idx3 = N - 1, idx4 = N - 1, crnt = N;
if (idx3 < N - 1 && idx4 >= N - 1) sums[1]++, sums[N + 1]--;
while (idx1 >= 1 && idx2 < 2 * N - 1) {
process();
if (a[idx1 - 1] > a[idx2 + 1]) crnt = --idx1;
else crnt = ++idx2;
}
while (idx1 >= 1) {
process();
crnt = --idx1;
}
while (idx2 < 2 * N - 1) {
process();
crnt = ++idx2;
}
process();
for (int i = 1; i < sums.size(); i++) sums[i] += sums[i - 1];
bitset<300005> res = 0;
for (int i = 1; i <= N; i++) res[i] = (sums[i] == N);
return res;
}
bool poss() {
a = A, b = B; auto red1 = calc();
b = C; auto blue1 = calc();
a = negA, b = negB; auto red2 = calc();
b = negC; auto blue2 = calc();
for (int i = 1; i <= N; i++) if ((red1[i] && blue2[i]) || (red2[i] && blue1[i])) return true;
return false;
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int a; cin >> N;
sums.resize(N + 5, 0);
negA.resize(2 * N, 0);
for (int i = 0; i < 2 * N; i++) {
cin >> a;
A.push_back(a);
negA[(i + N) % (2 * N)] = -a;
}
for (int i = 0; i < N; i++) {
cin >> a;
B.push_back(a);
negB.push_back(-a);
}
for (int i = 0; i < N; i++) {
cin >> a;
C.push_back(a);
negC.push_back(-a);
}
sort(B.begin(), B.end());
sort(negB.begin(), negB.end());
sort(C.begin(), C.end());
sort(negC.begin(), negC.end());
int low = 0, high = 1000000000, ans = -1;
while (low <= high) {
K = (low + high) / 2;
if (poss()) high = K - 1, ans = K;
else low = K + 1;
}
cout << ans << '\n';
}