//急性中风
// BFs:每次扩展到危险区域周围的各个区域
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int M=1300,N=130,L=100;
int block[L][M][N],m,n,l,t;
int st[L][M][N];
//block存放脑部的情况,m,n,l,t 长、宽、高、以及危险阈值
struct node
{
int x,y,z;
};
int bfs(node v)
{
int dx[] = { 1, -1, 0, 0, 0, 0 };
int dy[] = { 0, 0, 1, -1, 0, 0 };
int dz[] = { 0, 0, 0, 0, 1, -1 };
queue<node> q;
q.push(v);//将第一个结点压进队列
st[v.x][v.y][v.z]=1;//判重数组记录为1,标记为访问过
int cnt=1;//cnt记录危险区域的个数
//接下来就可以四周扩散Bfs了
while(!q.empty())
{
int a,b,c;
//获取第一个结点
node w=q.front();
q.pop();
for(int i=0;i<6;i++)
{
a=w.x+dx[i];
b=w.y+dy[i];
c=w.z+dz[i];
if(a>=0&&a<l&&b>=0&&b<m&&c>=0&&c<n)
{
if(block[a][b][c]&&!st[a][b][c])
{
node temp;
temp.x=a;
temp.y=b;
temp.z=c;
st[a][b][c]=1;
q.push(temp);
cnt++;
}
}
}
}
return cnt;//返回危险区域数
}
int main()
{
scanf("%d%d%d%d",&m,&n,&l,&t);
for(int i=0;i<l;i++)
{
for(int j=0;j<m;j++)
{
for(int k=0;k<n;k++)
{
scanf("%d",&block[i][j][k]);
}
}
}
//memset(st,0,sizeof(st));
int res=0;
for(int i=0;i<l;i++)
{
for(int j=0;j<m;j++)
{
for(int k=0;k<n;k++)
{
if(!st[i][j][k]&&block[i][j][k])
{
node in;
in.x=i;
in.y=j;
in.z=k;
int vol=bfs(in);
if(vol>=t) res+=vol;
}
}
}
}
cout<<res<<endl;
return 0;
}