#include <bits/stdc++.h>
using i64 = long long;
#ifdef DEBUG
#include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
#define debug(...) void(23)
#endif
constexpr int inf = int(1E9);
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int N;
std::cin >> N;
std::vector<int> A(2 * N), B(N), C(N);
for (int i = 0; i < 2 * N; ++i) {
std::cin >> A[i];
}
for (int i = 0; i < N; ++i) {
std::cin >> B[i];
}
for (int i = 0; i < N; ++i) {
std::cin >> C[i];
}
std::sort(B.begin(), B.end());
std::sort(C.begin(), C.end());
auto A1 = A;
auto B1 = B;
auto C1 = C;
std::rotate(A1.begin(), A1.begin() + N, A1.end());
std::reverse(B1.begin(), B1.end());
std::reverse(C1.begin(), C1.end());
for (auto& x : A1) {
x = -x;
}
for (auto& x : B1) {
x = -x;
}
for (auto& x : C1) {
x = -x;
}
int ans = inf;
for (int done = 0; done < 2; ++done) {
auto check = [&](auto x) -> bool {
debug("check", x);
auto work = [&](auto seedlings, auto plants) -> std::vector<int> {
std::vector<int> ps(N + 1);
auto mark_good = [&](auto l, auto r) -> void {
assert(0 <= l && l <= r && r <= N);
ps[l] += 1;
ps[r] -= 1;
};
int pl = 0, pr = 0, sr = 2 * N;
for (int i = 0; i < N; ++i) {
while (pl < N && plants[pl] < seedlings[i] - x) {
pl += 1;
}
while (pr < N && plants[pr] <= seedlings[i] + x) {
pr += 1;
}
while (sr - 1 >= N && seedlings[sr - 1] < seedlings[i]) {
sr -= 1;
}
int lo = i - sr + N;
if (pr <= lo) {
continue;
}
int l = std::max(0, i - pr + 1);
int r = (pl <= lo ? i + 1 : i - pl + 1);
if (l <= r) {
mark_good(l, r);
}
}
pl = N, pr = N, sr = N;
for (int i = N; i < 2 * N; ++i) {
while (pl - 1 >= 0 && plants[pl - 1] >= seedlings[i] - x) {
pl -= 1;
}
while (pr - 1 >= 0 && plants[pr - 1] > seedlings[i] + x) {
pr -= 1;
}
while (sr - 1 >= 0 && seedlings[sr - 1] > seedlings[i]) {
sr -= 1;
}
int lo = N - i + sr - 1;
if (pr <= lo) {
continue;
}
int l = (pl <= lo ? i - N + 1 : i - N + 1 + pl);
int r = std::min(N, i - N + 1 + pr);
if (l <= r) {
mark_good(l, r);
}
}
for (int i = 1; i <= N; ++i) {
ps[i] += ps[i - 1];
}
return ps;
};
auto vec1 = work(A, B);
auto vec2 = work(A1, C1);
debug(vec1, vec2);
for (int i = 0; i < N; ++i) {
if (vec1[i] == N && vec2[i] == N) {
return true;
}
}
return false;
};
int lo = 0, hi = inf;
while (lo < hi) {
int mid = (lo + hi) >> 1;
if (check(mid)) {
hi = mid;
} else {
lo = mid + 1;
}
}
debug(lo);
ans = std::min(ans, lo);
std::swap(B, C);
std::swap(B1, C1);
}
std::cout << ans << '\n';
return 0;
}