#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
struct lwt
{
int x;
int y;
}l1[100005],l2[100005];
double t[100005];
int n,m,tot,fa[100005],sum,cnt;
struct lwwt
{
int to;
int from;
double w;
}mapp[100005];
bool getin();
void build();
double dist(double x,double y,double x1,double y1);
bool cmp(lwwt a,lwwt b)
{
return a.w<b.w;
}
void klskr();
int find(int x);
int main()
{
bool x=getin();
if(x==false)
{
printf("0.000");
return 0;
}
build();
for(int i=1;i<=n+m;i++)
fa[i]=i;
klskr();
return 0;
}
double pos(int x,int y,double t)
{
return (double)x*(1.0-t)+(double)y*(1.0-t);
}
double dist(double x,double y,double x1,double y1)
{
return sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
}
bool getin()
{
scanf("%d%d",&n,&m);
if(n==0&&m==0)
return false;
int xn,yn,xn1,yn1;
scanf("%d%d%d%d",&xn,&yn,&xn1,&yn1);
for(int i=1;i<=n;i++)
scanf("%lf",&t[i]);
sort(t+1,t+1+n);
n=unique(t+1,t+1+n)-t;
for(int i=1;i<=n;i++)
{
l1[i].x=pos(xn,xn1,t[i]);
l1[i].y=pos(yn,yn1,t[i]);
}
int xm,ym,xm1,ym1;
scanf("%d%d%d%d",&xm,&ym,&xm1,&ym1);
memset(t,0.0,sizeof(t));
for(int i=1;i<=m;i++)
scanf("%lf",&t[i]);
sort(t+1,t+1+m);
m=unique(t+1,t+1+m)-t;
for(int i=1;i<=m;i++)
{
l2[i].x=pos(xm,xm1,t[i]);
l2[i].y=pos(ym,ym1,t[i]);
}
return true;
}
void build()
{
for(int i=1;i<n;i++)
{
mapp[++tot].from=i;
mapp[tot].to=i+1;
mapp[tot].w=dist(l1[i].x,l1[i].y,l1[i+1].x,l1[i+1].y);
}
for(int i=1;i<m;i++)
{
mapp[++tot].from=i+n;
mapp[tot].to=i+n+1;
mapp[tot].w=dist(l2[i].x,l2[i].y,l2[i+1].x,l2[i+1].y);
}
for(int i=1;i<=n;i++)
{
int r=1,l=m;
while(l+4<r)
{
int a=(r*2+l)/3;
int b=(l*2+r)/3;
if(dist(l2[a].x,l2[a].y,l1[i].x,l1[i].y)>dist(l2[b].x,l2[b].y,l1[i].x,l1[i].y))
r=a;
else
l=b;
}
for(int j=r-1;j<=l+1;j++)
{
if(j>=1&&j<=m)
{
mapp[++tot].from=i;
mapp[tot].to=j+n;
mapp[tot].w=dist(l1[i].x,l1[i].y,l2[j].x,l2[j].y);
}
}
}
for(int i=1;i<=m;i++)
{
int r=1,l=n;
while(l+4<r)
{
int a=(r*2+l)/3;
int b=(l*2+r)/3;
if(dist(l1[a].x,l1[a].y,l2[i].x,l2[i].y)>dist(l1[b].x,l1[b].y,l2[i].x,l2[i].y))
r=a;
else
l=b;
}
for(int j=r-1;j<=l+1;j++)
{
if(j>=1&&j<=n)
{
mapp[++tot].from=i;
mapp[tot].to=j+n;
mapp[tot].w=dist(l1[j].x,l1[j].y,l2[i].x,l2[i].y);
}
}
}
}
int find(int x)
{
while(x!=fa[x])
x=fa[x];
return x;
}
void klskr()
{
sort(mapp+1,mapp+1+tot,cmp);
for(int i=1;i<=tot;i++)
{
int a=find(mapp[i].to);
int b=find(mapp[i].from);
if(a==b)
continue;
sum+=mapp[i].w;
fa[a]=b;
if(++cnt==n+m-1)
break;
}
printf("%.3lf",sum);
}