You've got an *n* × *m* pixel picture. Each pixel can be white or black. Your task is to change the colors of as few pixels as possible to obtain a barcode picture.

A picture is a barcode if the following conditions are fulfilled: 
 -  All pixels in each column are of the same color. -  The width of each monochrome vertical line is at least *x* and at most *y* pixels. In other words, if we group all neighbouring columns of the pixels with equal color, the size of each group can not be less than *x* or greater than *y*.
The first line contains four space-separated integers *n*, *m*, *x* and *y* (1 ≤ *n*, *m*, *x*, *y* ≤ 1000; *x* ≤ *y*).

Then follow *n* lines, describing the original image. Each of these lines contains exactly *m* characters. Character "." represents a white pixel and "#" represents a black pixel. The picture description doesn't have any other characters besides "." and "#".
n,m,x,y=map(int,input().split())
arr=[]
for _ in range(n):
    a=input()
    arr.append(a)
nums= [[0,0] for i in range(m)]
cost=[[0,0] for i in range(m)]
for i in range(m):
    b=0
    w=0
    for j in range(n):
        if arr[j][i]=='.':
            w+=1
        else:
            b+=1
    nums[i][0]=b
    nums[i][1]=w
    cost[i][1]=b
    cost[i][0]=w
    
memo=[[[-1 for k in range(m)]for j in range(2)]for i in range(m)]
def dp(i,p,l):
    if i<m:
        if i==m-1:
            if l>=x and l<=y-1:
                return min(cost[i][0],cost[i][1])
            elif l>=x-1:
                return cost[i][p]
            else:
                return 10**9
                
        else:
            if l>=x and l<=y:
                if p==0:
                    if memo[i][p][l]!=-1:
                        return memo[i][p][l]
                    else:
                        memo[i][p][l]=min(cost[i][0]+dp(i+1,0,l+1),cost[i][1]+dp(i+1,1,1))
                        return memo[i][p][l]
                else:
                    if memo[i][p][l]!=-1:
                        return memo[i][p][l]
                    else:
                        memo[i][p][l]=min(cost[i][1]+dp(i+1,1,l+1),cost[i][0]+dp(i+1,0,1))
                        return memo[i][p][l]
            
            elif l<x:
                if memo[i][p][l]!=-1:
                    return memo[i][p][l]
                else:
                    memo[i][p][l]=cost[i][p]+dp(i+1,p,l+1)
                    return memo[i][p][l]
                
            elif l>y:
                return 10**9
    else:
        return 10**9
final=min(dp(0,0,0),dp(0,1,0))
print(final)