//Time 531ms,Memory 1228K
#include<stdio.h> #include<string.h> int map[50][50][50],t,t1,vis[50][50][50],dx[6]={0,0,0,0,1,-1},dy[6]={0,1,0,-1,0,0},dz[6]={1,0,-1,0,0,0},a,b,c; void f(int x,int y,int z) { int i,nx,ny,nz;t1++; for(i=0;i<6;i++) { nx=x+dx[i];ny=y+dy[i];nz=z+dz[i]; if(nx<0 || nx>a-1 || ny<0 || ny>b-1 || nz<0 || nz>c-1 || map[nx][ny][nz]==1) continue; if(vis[nx][ny][nz]!=-1 && t1>=vis[nx][ny][nz]) continue; vis[nx][ny][nz]=t1; if((nx==a-1 && ny==b-1 && nz==c-1) || t-t1<a+b+c-nx-ny-nz-3) { t1--;return; } else f(nx,ny,nz); } t1--;return; } int main() { int i,j,k,n,x=0,y=0,z=0; scanf("%d",&n); while(n--) { memset(vis,-1,sizeof(vis));t1=0; scanf("%d%d%d%d",&a,&b,&c,&t); for(i=0;i<a;i++) { for(j=0;j<b;j++) { for(k=0;k<c;k++) scanf("%d",&map[i][j][k]); } } vis[0][0][0]=0;f(x,y,z); printf("%d\n",vis[a-1][b-1][c-1]); } return 0; }