#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e9;
int n;
vector<int> a(600005), b(300005), c(300005);
int get_first(int le, int ri, int val)
{
for(int i=le;i<=ri;i++)
if(a[i] > val)
return i;
return ri + 1;
}
int get_first_rev(int le, int ri, int val)
{
for(int i=ri;i>=le;i--)
if(a[i] > val)
return i;
return le - 1;
}
bool verif_BC(int lim)
{
vector<bool> good(n+2, 1);
for(int s=1;s<=n;s++)
{
vector<int> forB, forC;
for(int u=s;u<=s+n-1;u++)
forB.push_back(a[u]);
for(int u=1;u<s;u++)
forC.push_back(a[u]);
for(int u=s+n;u<=2*n;u++)
forC.push_back(a[u]);
sort(forB.begin(), forB.end());
sort(forC.begin(), forC.end());
for(int i=1;i<=n;i++)
{
if(abs(b[i] - forB[i-1]) > lim)
{
good[s] = 0;
break;
}
if(abs(c[i] - forC[i-1]) > lim)
{
good[s] = 0;
break;
}
}
}
for(int s=1;s<=n;s++)
if(good[s])
return 1;
return 0;
}
bool verif(int lim)
{
bool rez = verif_BC(lim);
swap(b, c);
rez |= verif_BC(lim);
swap(b, c);
return rez;
}
signed main()
{
cin>>n;
for(int i=1;i<=2*n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i];
for(int i=1;i<=n;i++)
cin>>c[i];
sort(b.begin()+1, b.begin()+1+n);
sort(c.begin()+1, c.begin()+1+n);
int st=0,dr=INF,ans=-1;
while(st<=dr)
{
int mij = (st + dr) / 2;
if(verif(mij))
{
ans = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
assert(ans != -1);
cout<<ans;
return 0;
}