#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#define db double#define ll long long
using namespace std;
const int maxn=255,maxn1=62505,maxn2=18800000;
struct code{
int a,b;
}d[maxn];
int a[maxn],b[maxn],r[maxn],c[maxn],v[maxn1*100],d1[maxn1];
int first[maxn1],last[maxn2],next[maxn2],value[maxn2];
int n,i,t,j,k,l,m,p,x,y,test,num,r1,mid,q;
bool bz[maxn1];
db z;
bool cmp(code x,code y){
returnx.a>y.a || x.a==y.a && x.b<y.b;
}
ll sqr(ll x){
returnx*x;
}
void lian(intx,inty,int z){
last[++num]=y;next[num]=first[x];first[x]=num;value[num]=z;
}
void spfa(){
v[1]=i=0;j=1;
memset(d1,127,sizeof(d1));d1[0]=0;bz[0]=true;q=d1[1];
while (i<j){
x=v[++i];
for (t=first[x];t;t=next[t]){
if (d1[last[t]]<=d1[x]+value[t]) continue;
d1[last[t]]=d1[x]+value[t];
if (!bz[last[t]]){
v[++j]=last[t],bz[v[j]]=true;
if (d1[v[j]]<d1[v[i+1]]) swap(v[j],v[i+1]);
}
}
bz[x]=false;
}
}
int main(){
freopen("river.in","r",stdin);freopen("river.out","w",stdout);
scanf("%d",&test);
while (test){
scanf("%d%d%d",&n,&m,&p);
for (i=1;i<=n;i++)
scanf("%d%d",&a[i],&b[i]);
for (i=1;i<=m;i++)
scanf("%d%d",&d[i].a,&d[i].b);
num=0;
memset(first,0,sizeof(first));
sort(d+1,d+m+1,cmp);
t=1e9;l=0;
for (i=1;i<=m;i++)
if (t>d[i].b){
if (d[i].a==d[i-1].a) continue;
r[++l]=d[i].a,c[l]=d[i].b;
t=min(t,c[l]);
}
m=l;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (i!=j){
l=m;
z=sqrt(sqr(a[i]-a[j])+sqr(b[i]-b[j]));
for (k=1;k<=m;k++){
while (r[k]+r[l]<z && l) l--;
if (r[k]+r[l]>=z) lian((i-1)*m+k,(j-1)*m+l,c[l]);
}
}
for (i=1;i<=n;i++)
for (j=m-1;j>=1;j--)
lian((i-1)*m+j+1,(i-1)*m+j,c[j]-c[j+1]);
for (i=1;i<=n;i++)
for (k=1;k<=m;k++){
if (r[k]<b[i])break;
lian(0,(i-1)*m+k,c[k]);
}
for (i=1;i<=n;i++)
for (k=1;k<=m;k++){
if (r[k]<p-b[i])break;
lian((i-1)*m+k,n*m+1,0);
}
spfa();
if (d1[n*m+1]!=q)printf("%d\n",d1[n*m+1]);
elseprintf("impossible\n");
test--;
}
}