#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=130;
int n,m,l,num,matrix[maxn][maxn][maxn]={0};
int X[6]={0,0,1,-1,0,0};
int Y[6]={1,-1,0,0,0,0};
int Z[6]={0,0,0,0,1,-1};
bool inq[maxn][maxn][maxn]={false};
struct node
{
int x, y,z;
};
bool test(int x,int y ,int z)
{
if(x>=m||x<0||y>=n||y<0||z>=l||z<0)return false;
else if(inq[x][y][z]==true||matrix[x][y][z]==0)return false;
else return true;
}
int BFS(int x,int y,int z)
{
queue<node> q;
int tn=1;
node temp;
temp.x=x,temp.y=y,temp.z=z;
q.push(temp);
inq[x][y][z]=true;
while(!q.empty())
{
node top=q.front();
q.pop();
for (int i=0;i<6;i++)
{
int newX=top.x+X[i];
int newZ=top.z+Z[i];
int newY=top.y+Y[i];
if(test(newX,newY,newZ))
{
temp.x=newX;
temp.y=newY;
temp.z=newZ;
q.push(temp);
inq[newX][newY][newZ]=true;
tn++;
}
}
}
if(tn>=num)
return tn;
else
return 0;
}
int main()
{
cin>>m>>n>>l>>num;
for(int k=0;k<l;k++)
{
for (int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&matrix[i][j][k]);
}
}
}
int ans=0;
for(int k=0;k<l;k++)
{
for (int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(matrix[i][j][k]==1&&inq[i][j][k]==false)
{
ans+=BFS(i,j,k);
}
}
}
}
printf("%d",ans);
}