#include <cstdio>
#include <algorithm>
#include <cstring>
#define DIM 16
#define INF 2147483647
#define f first
#define s second
using namespace std;
int N, T, C1, C2, C3, minim;
int X1, X2, X3, X4, X5, X6, X7, X8;
int Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8;
int Dist[DIM][DIM], Viz[DIM], Sol[DIM];
pair <int, int> Points[DIM];
int abs (int X) {
return (X > 0) ? X : -X;
}
inline int getDistance (pair <int, int> X, pair <int, int> Y) {
return abs (X.f - Y.f) + abs (X.s - Y.s);
}
inline int getDist (int i, int j) {
return Dist[i][j] ? Dist[i][j] : getDistance (Points[i], Points[j]);
}
void getSol (int M) {
int dist = 0;
for (int i = 2; i <= M; i ++)
dist += getDist (Sol[i-1], Sol[i]);
dist += getDist (Sol[M], N);
minim = min (minim, dist);
return;
}
void backTrack (int pos) {
getSol (pos - 1);
for (int i = 2; i < N; i ++) {
if (!Viz[i]) {
Viz[i] = 1; Sol[pos] = i;
backTrack (pos + 1);
Viz[i] = 0; Sol[pos] = 0;
}
}
return;
}
int main () {
freopen ("portal3.in" ,"r", stdin );
freopen ("portal3.out","w", stdout);
scanf ("%d", &T);
for (int t = 1; t <= T; t ++) {
scanf ("%d %d", &X8, &Y8);
scanf ("%d %d %d %d %d", &X2, &Y2, &X3, &Y3, &C1);
scanf ("%d %d %d %d %d", &X4, &Y4, &X5, &Y5, &C2);
scanf ("%d %d %d %d %d", &X6, &Y6, &X7, &Y7, &C3);
N = 0;
Points[++N] = make_pair (X1, Y1); Points[++N] = make_pair (X2, Y2);
Points[++N] = make_pair (X3, Y3); Points[++N] = make_pair (X4, Y4);
Points[++N] = make_pair (X5, Y5); Points[++N] = make_pair (X6, Y6);
Points[++N] = make_pair (X7, Y7); Points[++N] = make_pair (X8, Y8);
memset (Dist, 0, sizeof (Dist));
Dist[2][3] = Dist[3][2] = C1;
Dist[4][5] = Dist[5][4] = C2;
Dist[6][7] = Dist[7][6] = C3;
minim = INF; Sol[1] = 1; backTrack (2);
printf ("%d\n", minim);
}
return 0;
}