#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
int mp[maxn][maxn];
int vis[maxn][maxn];
int dx[8] = {1, -1, -1, -1, 0, 0, 1, 1};
int dy[8] = {0, -1, 0, 1, -1, 1, -1, 1};
int n, m, cnt,d;
int judge(int x, int y)
{
if(x >= 1 && x <= n && y >= 1 && y <= m)
return 1;
return 0;
}
void dfs(int x, int y,int num)
{
vis[x][y] = num;
for(int i = 0; i < 8; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if(!vis[nx][ny] && judge(nx,ny) && abs(mp[nx][ny] - mp[x][y]) <= d)
{
//printf("I am(%d %d) and my fayher(%d %d) -- %d\n",nx, ny,x,y ,num);
dfs(nx,ny,num);
}
}
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d%d%d", &n, &m, &d);//注意n, m
memset(vis, 0, sizeof(vis));
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
scanf("%d", &mp[i][j]);
}
}
cnt = 1;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
if(!vis[i][j])
{
//printf("I am father %d %d %d\n", i, j,cnt);
dfs(i, j,cnt++);
}
}
}
printf("%d\n",cnt-1);
}
}
/*
2
3 3 0
1 1 1
0 1 0
0 1 0
3 4 1
10 11 12 13
9 8 7 6
2 3 4 5
*/