#include<bits/stdc++.h>
using namespace std;
bool st[55][55][55];
int a[55][55][55];
int dx[6] = {0, 1, 0, -1, 0, 0};
int dy[6] = {1, 0, -1, 0, 0, 0};
int dz[6] = {0, 0, 0, 0, -1, 1};
int ans = 0;
int l, w, h, m;
struct LLL {
int x, y, z;
};
void bfs(int i, int j, int k) {
queue q;
q.push({i, j, k});
st[i][j][k] = true;
while (!q.empty()) {
LLL t = q.front(); q.pop();
int x = t.x, y = t.y, z = t.z;
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 || ny <= 0 | nz <= 0) continue;
if (nx > l || ny > w || nz > h) continue;
if (st[nx][ny][nz]) continue;
if (abs(a[nx][ny][nz] - a[y][z]) <= m) {
st[nx][ny][nz] = true;
q.push({nx, ny, nz});
}
}
}
ans ++;
}
int main(){
cin >> l >> w >> h;
cin >> m;
for (int i = 1; i <= l; ++ i) {
for (int j = 1; j <= w; ++ j) {
for (int k = 1; k <= h; ++ k) {
cin >> a[i][j][k];
}
}
}
for (int i = 1; i <= l; ++ i) {
for (int j = 1; j <= w; ++ j) {
for (int k = 1; k <= h; ++ k) {
if (!st[i][j][k]) {
bfs(i ,j ,k);
}
}
}
}
cout << ans;
return 0;
// Function
#include<bits/stdc++.h>
using namespace std;
long long a,b,c,DDD[26][26][26];
long long LLL(long long x,long long y,long long z){
if(x<=0||y<=0||z<=0) return 1;
if(x>20||y>20||z>20){
if(DDD[20][20][20]!=4557430888798830399) return DDD[20][20][20];
DDD[20][20][20]=LLL(20,20,20);
return DDD[20][20][20];
}
if(DDD[y][z]!=4557430888798830399) return DDD[y][z];
if(x<y&&y<z){
DDD[y][z]=LLL(x,y,z-1)+LLL(x,y-1,z-1)-LLL(x,y-1,z);
return DDD[y][z];
}
DDD[y][z]=LLL(x-1,y,z)+LLL(x-1,y-1,z)+LLL(x-1,y,z-1)-LLL(x-1,y-1,z-1);
return DDD[y][z];
}
int main(){
memset(DDD,63,sizeof(DDD));
while(cin >> a >> b >> c){
if (a == -1 && b == -1 && c == -1) break;
cout<<“w(”<<a<<", “<<b<<”, “<<c<<”) = "<<LLL(a,b,c);
cout<<endl;
}
return 0;
}