'''
没认真读题
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)