#include<stdio.h>
#include<math.h>
__int64 p[105],d[105][105];
int main()
{
int t,tt,n,m,a,b,i,j,k;
__int64 L1,L2,L3,L4,C1,C2,C3,C4,temp;
scanf("%d",&t); // 居然是少写了这句,所以t成了随机数,编译通过了
for(tt = 1; tt <= t; tt ++)
{
scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d%I64d",
&L1,&L2,&L3,&L4,&C1,&C2,&C3,&C4);
scanf("%d%d",&n,&m);
for(i = 0; i < n; i ++)
scanf("%I64d",&p[i]);
/*初始化费用d[i][j],也可以认为是距离和费用的转换 */
for(i = 0; i < n; i ++)
for(j = 0; j < n; j ++)
{
if(i == j) d[i][j] = 0; // 同一点木有距离
else {
temp = abs(p[i] - p[j]); //求两点距离
if(temp <= L1)
d[i][j] = C1;
else if(temp <= L2)
d[i][j] = C2;
else if(temp <= L3)
d[i][j] = C3;
else if(temp <= L4)
d[i][j] = C4;
else if(temp > L4)
d[i][j] = -1; //也可以定义成等于INF,当然INF需要足够大,至少大于100000000000
}
}
/* FLOYD算法 */
for(k = 0; k < n; k ++) //k相当于中转站!
for(i = 0; i < n; i ++)
for(j = 0; j < n; j ++)
if(d[i][k] != -1 && d[k][j] != -1) {
temp = d[i][k] + d[k][j];
if(temp < d[i][j] || d[i][j] == -1) //注意到d[i][j] == -1才是真正的大距离
d[i][j] = temp;
}
printf("Case %d:\n",tt);
for(i = 0; i < m; i ++)
{
scanf("%d%d",&a,&b);
if(d[a-1][b-1] == -1)
printf("Station %d and station %d are not attainable.\n",a,b);
else
printf("The minimum cost between station %d and station %d is %I64d.\n",a,b,d[a-1][b-1]);
}
}
return 0;
}