#include <bits/stdc++.h>
using namespace std;
int n, m, l, t;
const int N = 1300, M = 150, H = 70;
int arr[N][M][H], vis[N][M][H];
struct node
{
int x, y, z;
};
int dx[] = {0, 0, 0, 0, 1, -1};
int dy[] = {0, 0, 1, -1, 0, 0};
int dz[] = {1, -1, 0, 0, 0, 0};
int dfs(int x, int y, int z)
{
int ans = 0;
queue<node> q;
q.push({x, y, z});
vis[x][y][z]=1;
while (q.size())
{
auto p = q.front();
q.pop();
ans++;
for (int i = 0; i < 6; i++)
{
int nx = dx[i] + p.x, ny = dy[i] + p.y, nz = dz[i] + p.z;
if (nx < 1 || nx > n || ny < 1 || ny > m || nz < 1 || nz > l)
continue;
if (arr[nx][ny][nz] == 0)
continue;
if(vis[nx][ny][nz])continue;
vis[nx][ny][nz]=1;
q.push({nx, ny, nz});
}
}
if (ans < t)
ans = 0;
return ans;
}
int main()
{
cin >> n >> m >> l >> t;
for (int k = 1; k <= l; k++)
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> arr[i][j][k];
}
}
int ans = 0;
for (int k = 1; k <= l; k++)
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (!vis[i][j][k] && arr[i][j][k])
{
// cout<<i<<" "<<j<<" "<<k<<"\n";
// cout<<dfs(i,j,k)<<"\n";
ans += dfs(i, j, k);
}
}
}
cout<<ans<<"\n";
return 0;
}
11-27
163

11-29
209

10-20
614

10-07
761
