#include<bits/stdc++.h>
using namespace std;
int dx[6] = { 1,-1,0,0,0,0 };
int dy[6] = { 0,0,1,-1,0,0 };
int dz[6] = { 0,0,0,0,1,-1 };
int m, n, h;
int board[102][102][102];
int dis[102][102][102];
queue<tuple<int, int, int>> Q;
int main() {
cin >> m >> n >> h;
for(int k=0;k<h;k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> board[i][j][k];
if (board[i][j][k] == 1) Q.push({ i,j,k });
if (board[i][j][k] == 0)dis[i][j][k] = -1;
}
}
}
while (!Q.empty()) {
auto cur = Q.front(); Q.pop();
int x, y, z;
tie(x, y, z) = cur;
for (int i = 0; i < 6; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
int nz = z + dz[i];
if (nx < 0 || nx >= n || ny < 0 || ny >= m || nz < 0 || nz >= h)continue;
if (dis[nx][ny][nz] != -1)continue;
Q.push({ nx,ny,nz });
dis[nx][ny][nz] = dis[x][y][z] + 1;
}
}
int ans = 0;
for (int i = 0; i < h; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < m; k++) {
if (dis[j][k][i] == -1) {
cout << -1;
return 0;
}
ans = max(ans, dis[j][k][i]);
}
}
}
cout << ans;
}