1 #include<cstdio>
2 #include<cmath>
3 #include<cstring>
4 using namespace std;
5 const int maxn=2610;
6 int G[maxn][maxn],y[maxn],num[maxn][maxn];
7 bool vis[maxn],f[maxn][maxn];
8 int dx[5],dy[5];
9 int n,m,r,c,id;
10 char s[501];
11 long long ans;
12 bool dfs(int u){
13 for(int i=1;i<=id;i++)
14 if(G[u][i]&&!vis[i]){
15 vis[i]=1;
16 if(!y[i]||dfs(y[i])){
17 y[i]=u;
18 return 1;
19 }
20 }
21 return 0;
22 }
23 int main(){
24 scanf("%d%d%d%d",&n,&m,&r,&c);
25 dx[0]=r;dx[1]=r;dx[2]=c;dx[3]=c;
26 dy[0]=c;dy[1]=-c;dy[2]=r;dy[3]=-r;
27 for(int i=1;i<=n;i++){
28 scanf("%s",s);
29 for(int j=0;j<m;j++){
30 if(s[j]==‘.‘) f[i][j+1]=1,num[i][j+1]=++id;
31 }
32 }
33 for(int i=1;i<=n;i++)
34 for(int j=1;j<=m;j++)
35 if(f[i][j]) for(int k=0;k<4;k++){
36 int x=i+dx[k],y=j+dy[k];
37 if(x<1||x>n||y<1||y>m) continue;
38 if(f[x][y]) G[num[i][j]][num[x][y]]=1;
39 }
40 for(int i=1;i<=id;i++){
41 memset(vis,0,sizeof(vis));
42 if(dfs(i)) ans++;
43 }
44 printf("%d\n",id-ans);
45 }