#include <stdio.h>
#include <stdlib.h>
#define IN_PATH "portal3.in"
#define OUT_PATH "portal3.out"
#define SIZE 1000000000
int read_input (long int *T, long int *M, long int *N, long int *X, long int *Y, long int *C) {
int i;
FILE *file;
file = fopen(IN_PATH, "r+");
if (fscanf(file, "%ld", T)<=0)
return -1;
if (fscanf(file, "%ld", M)<=0)
return -1;
if (fscanf(file, "%ld", N)<=0)
return -1;
for(i=0;i<3;i++) {
fscanf(file, "%ld", &X[i*2]);
fscanf(file, "%ld", &Y[i*2]);
fscanf(file, "%ld", &X[i*2+1]);
fscanf(file, "%ld", &Y[i*2+1]);
fscanf(file, "%ld", &C[i]);
}
fclose(file);
return 0;
}
int write_output (long int solution) {
FILE *file;
file = fopen(OUT_PATH, "a+");
fprintf(file, "%ld ", solution);
fclose(file);
return 0;
}
int compute_time (int X1, int Y1, int X2, int Y2) {
long int time = 0;
time = (X1<X2)?(X2-X1):(X1-X2);
time += (Y1<Y2)?(Y2-Y1):(Y1-Y2);
return time;
}
void portal3() {
long int T, M, N;
long int *X, *Y, *C;
X = (long int*)malloc(6*sizeof(long int));
Y = (long int*)malloc(6*sizeof(long int));
C = (long int*)malloc(3*sizeof(long int));
long int i, time, min_time, index, total_time = 0, cX=0, cY=0;
while(T>0) {
if(read_input (&T, &M, &N, X, Y, C)<0)
return;
while (cX<M && cY<N) {
min_time = compute_time(cX,cY,M,N);
index = -1;
for(i=0;i<3;i++) {
if(X[i]>=0) {
time = compute_time(cX,cY,X[i*2],Y[i*2]);
if(time<min_time) {
min_time = time;
index = i*2;
}
}
}
total_time += min_time;
if(index>=0) {
total_time += C[index/2];
cX = X[index+1];
cY = Y[index+1];
X[index] = Y[index] = C[index] = -1;
}
else {
cX = M;
cY = N;
}
}
write_output(total_time);
T--;
}
free(X);
free(Y);
free(C);
}
int main () {
portal3();
return 0;
}