#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 1000000000000000001 int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); int H,W,N,D; cin>>H>>W>>N>>D; vector p(H,vector(W,-1)); rep(i,N){ int a,b; cin>>a>>b; a--,b--; p[a][b] = i; } dsu d(N); rep(i,H){ rep(j,W){ if(p[i][j]==-1)continue; for(int dx=-5;dx<=5;dx++){ for(int dy=-5;dy<=5;dy++){ if(abs(dx)+abs(dy)>D)continue; int x = i+dx,y = j+dy; if(x<0||x>=H||y<0||y>=W)continue; if(p[x][y]!=-1)d.merge(p[i][j],p[x][y]); } } } } int cur = 0; rep(i,N){ if(d.leader(i)==i && d.size(i)>=2)cur++; } int m = Inf32,M = -Inf32; rep(i,H){ rep(j,W){ if(p[i][j]!=-1)continue; set cnt; for(int dx=-5;dx<=5;dx++){ for(int dy=-5;dy<=5;dy++){ if(abs(dx)+abs(dy)>D)continue; int x = i+dx,y = j+dy; if(x<0||x>=H||y<0||y>=W)continue; if(p[x][y]!=-1)cnt.insert(d.leader(p[x][y]));//d.merge(p[i][j],p[x][y]); } } int x = cur; if(cnt.size()!=0){ x ++; for(auto aa:cnt){ if(d.size(aa)!=1)x--; } } m = min(m,x); M = max(M,x); } } cout<