'''
没认真读题
a,b,x,y=map(int,input().split())
#确保大血量大攻击力在前面
if b>a:
    c=max(a,b)
    d=min(a,b)
else:
    c=a
    d=b
if y>x:
    e=max(x,y)
    f=min(x,y)
else:
    e=x
    f=y
coun=0

#for i in range(1,21):
while c>0 or d>0:
    if c>0:
        c-=e
        coun+=1
    if c>0:
        c-=f
        coun+=1
        if d>0:
            d-=f
            coun+=1
    if d>0:
        d-=e
        coun+=1
    if d>0:
        d-=f
        coun+=1
print(round(coun/2))
'''
a, b, x, y = map(int, input().split())

# 思路:枚举使用k次烈焰风暴,剩下的用火球术补刀
# k的范围:0到max(a,b)//y+1
min_count = float('inf')

for k in range(0, max(a, b) // y + 2):  # 枚举烈焰风暴使用次数+2为了确保没有遗漏最优解
    # 使用k次烈焰风暴后,两只怪物剩余血量
    remain_a = max(0, a - k * y)
    remain_b = max(0, b - k * y)
    
    # 剩余血量用火球术补刀
    count_a = (remain_a + x - 1) // x  # 向上取整
    count_b = (remain_b + x - 1) // x  # 向上取整
    
    # 总次数 = k次烈焰风暴 + 补刀火球术次数
    total = k + count_a + count_b
    min_count = min(min_count, total)#枚举比较出最小的次数

print(min_count)