#include using namespace std; #define rep(i,l,r) for(int i=(l);i<(r);i++) #define all(a) begin(a),end(a) #define sz(A) (int)(A).size() typedef long long ll; typedef vector vi; typedef pair pii; struct dsu{ vectornec; dsu(int _N):nec(_N,-1){} int leader(int v){ while(nec[v]>=0)v=nec[v]; return v; } int merge(int u,int v){ u=leader(u); v=leader(v); if(u==v)return u; if(nec[u]sync_with_stdio(0); cin.exceptions(cin.failbit); int H,W,N,D;cin>>H>>W>>N>>D; vector>star(H,vector(W)); rep(i,0,N){ ll x,y;cin>>x>>y; star[x-1][y-1]=1; } dsu DSU(H*W); rep(i,0,H)rep(j,0,W)if(star[i][j]){ rep(x,i-D,i+D+1)rep(y,j-D+abs(x-i),j+D-abs(x-i)+1)if(0<=min({x,y,H-1-x,W-1-y})&&star[x][y])DSU.merge(i*W+j,x*W+y); } vectorleader(H*W); rep(i,0,H)rep(j,0,W)if(DSU.size(i*W+j)>1)leader[DSU.leader(i*W+j)]=true; int c=count(all(leader),true); int mi=1e9,ma=0; rep(i,0,H)rep(j,0,W)if(!star[i][j]){ setS,T; rep(x,i-D,i+D+1)rep(y,j-D+abs(x-i),j+D-abs(x-i)+1)if(0<=min({x,y,H-1-x,W-1-y})&&star[x][y]){ int l=DSU.leader(x*W+y); if(leader[l])S.insert(l); else T.insert(l); } int n=c; if(sz(T)||sz(S))n=c+1-sz(S); mi=min(n,mi); ma=max(n,ma); } cout<