#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct cooldinate {
int x;
int y;
int z;
};
int s[103][103][103] = { 0, };
struct cooldinate cooldi[300];
int front = 0, rear = 0;
int day = 0;
int a = 0, b = 0, c = 0;
void Enque(int x, int y, int z);
void Deque(void);
int queisempty(void);
void spread(void);
int queisEmpty(void);
int main() {
int m, n, h;
scanf("%d %d %d", &m, &n, &h);
for (int i = 0; i <= h + 1; i++) {
for (int j = 0; j <= n + 1; j++) {
for (int k = 0; k <= m + 1; k++) {
// 정 육면체를 감싸는 부분을 -1로 만든다
if (i == 0 || i == h + 1)
s[i][j][k] = -1;
else if (j == 0 || j == n + 1)
s[i][j][k] = -1;
else if (k == 0 || k == m + 1)
s[i][j][k] = -1;
//문제의 조건들을 스캔해서 읽어들인다
else {
scanf("%d", &s[i][j][k]);
}
}
}
}
//스프레드 확산 양상 파악용 테스트 케이스
//for (int i = 0; i <= h + 1; i++) {
// for (int j = 0; j <= n + 1; j++) {
// for (int k = 0; k <= m + 1; k++) {
// printf("%d ", s[i][j][k]);
// }
// printf("\n");
// }
//}
while (1) {
// 토마토가 다 익었는지 확인해줄 변수 지정
int sum = 0;
// 익은 토마토를 찾아 그 위치를 인큐한다
Enque(h, n, m);
// 익은 토마토의 위치 주변의 토마토들을 익힌다.
while (1) {
Deque();
if (front == rear)
break;
}
// 토마토 익은 위치 확인 후 토마토를 익힌 다음 날짜를 하루 증가시킨다
day++;
// 토마토 위치의 인자들을 더해 토마토가 전부 익었는지 확인한다.
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= m; k++) {
sum = sum + s[i][j][k];
}
}
}
if (sum == h * n * m)
break;
sum = 0;
}
printf("%d", day);
}
void Enque(int h, int n, int m) { //토마토들을 전부 탐색하여 익은 토마토들의 위치를 큐에 넣어준다
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= m; k++) {
if (s[i][j][k] == 1) {
rear++;
cooldi[rear].x = i;
cooldi[rear].y = j;
cooldi[rear].z = k;
}
}
}
}
}
void Deque(void) { //익은 토마토들의 위치로 찾아가 주변 토마토 들을 익힌다.
front++;
a = cooldi[front].x;
b = cooldi[front].y;
c = cooldi[front].z;
if (s[a][b][c + 1] == 0)
s[a][b][c + 1] = 1;
if (s[a][b][c - 1] == 0)
s[a][b][c - 1] = 1;
if (s[a][b + 1][c] == 0)
s[a][b + 1][c] = 1;
if (s[a][b - 1][c] == 0)
s[a][b - 1][c] = 1;
if (s[a + 1][b][c] == 0)
s[a + 1][b][c] = 1;
if (s[a - 1][b][c] == 0)
s[a - 1][b][c] = 1;
}
int queisEmpty(void) { //이것만 쓰면 무한 루프에 빠진다 원인이 뭘까? 디큐 무한루프 탈출용으로 만들었으나 제 역학을 못해 미사용
if (front == rear)
return 1;
else return 0;
}