#include "wiring.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define all(x) x.begin(),x.end()
#define F first
#define S second
#define sz(x) (int)x.size()
#define pb push_back
const int MAXN=2e5+10;
const ll inf=1e16;
typedef pair<int,int> pii;
typedef tuple<int,int,int> trio;
ll dp[MAXN][100];
long long min_total_length(std::vector<int> r, std::vector<int> b){
int n=sz(r),m=sz(b);
vector<pii> v(n+m);
fall(i,0,n-1) v[i]={r[i],0};
fall(i,0,m-1) v[i+n]={b[i],1};
sort(all(v));
fall(mask,0,63) dp[n+m-1][mask]=inf;
dp[n+m-1][1]=0;
rfall(i,n+m-2,0){
fall(mask,0,63){
dp[i][mask]=inf;
if(mask&1) dp[i][mask]=dp[i+1][mask>>1];
int nova=mask>>1;
fall(nm,1,63){
ll cst=0;
bool tem=0;
fall(j,i+1,min(n+m-1,i+6)){
int bit=j-i-1;
if(!(nm&(1<<bit)) || (nova&(1<<bit))) continue;
if(v[j].S==v[i].S){
cst=inf;
break;
}
tem=1;
cst+=v[j].F-v[i].F;
}
if(tem || mask&1) dp[i][mask]=min(dp[i][mask],dp[i+1][nm]+cst);
}
}
}
return dp[0][0];
}