import java.io.*;
import java.util.*;
public class Solution {
static class Edge implements Comparable<Edge> {
int x, y;
long len = Integer.MAX_VALUE;
public Edge(int x) {
super();
this.x = x;
}
@Override
public int compareTo(Edge o) {
return Double.compare(len, o.len);
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int test_case = 1; test_case <= T; test_case++) {
int N = Integer.parseInt(br.readLine());
Edge[] edgeList = new Edge[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
edgeList[i] = new Edge(Integer.parseInt(st.nextToken()));
}
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
edgeList[i].y = Integer.parseInt(st.nextToken());
}
double E = Double.parseDouble(br.readLine());
boolean[] v = new boolean[N];
long[] minEdge = new long[N];
for (int i = 0; i < N; i++) {
minEdge[i] = Long.MAX_VALUE;
}
long result = 0;
int cnt = 0;
minEdge[0] = 0;
for (int i = 0; i < N; i++) {
long min = Long.MAX_VALUE;
int minVertex = -1;
for (int j = 0; j < N; j++) {
if (!v[j] && min > minEdge[j]) {
min = minEdge[j];
minVertex = j;
}
}
if (minVertex == -1) {
break;
}
v[minVertex] = true;
result += min;
if (cnt++ == N - 1)
break;
for (int j = 0; j < N; j++) {
double d = dist(edgeList[minVertex], edgeList[j]);
if (!v[j] && d != 0 && minEdge[j] > d) {
minEdge[j] = (long) d;
}
}
}
sb.append("#").append(test_case).append(" ").append(Math.round(result * E)).append("\n");
}
System.out.println(sb);
}
static double dist(Edge e1, Edge e2) {
return Math.pow(e1.x - e2.x, 2) + Math.pow(Math.abs(e1.y - e2.y), 2);
}
}