import sys
from _collections import deque
visited = {}
a, b, c, d = map(int, sys.stdin.readline().split())
def bfs():
queue = deque()
queue.append((0,0))
visited[(0,0)] = 1
if c==0 and d==0:
return 0
while queue:
x, y = queue.popleft()
#Fill A
if not visited.get((a, y)):
queue.append((a, y))
visited[(a, y)] = visited[(x, y)] + 1
#Fill B
if not visited.get((x, b)):
queue.append((x, b))
visited[(x, b)] = visited[(x, y)] + 1
#Empty A
if not visited.get((0, y)):
queue.append((0, y))
visited[(0, y)] = visited[(x, y)] + 1
#Empty B
if not visited.get((x, 0)):
queue.append((x, 0))
visited[(x, 0)] = visited[(x, y)] + 1
#Move A to B
if x+y >= b:
if not visited.get((x+y-b, b)):
queue.append((x+y-b, b))
visited[(x+y-b, b)] = visited[(x, y)] + 1
else:
if not visited.get((0, x+y)):
queue.append((0, x+y))
visited[(0, x+y)] = visited[(x, y)] + 1
#move B to A
if x+y >= a:
if not visited.get((a, x+y-a)):
queue.append((a, x+y-a))
visited[(a, x+y-a)] = visited[(x, y)] + 1
else:
if not visited.get((x+y, 0)):
queue.append((x+y, 0))
visited[(x+y, 0)] = visited[(x, y)] + 1
if visited.get((c,d)):
if visited[(x, y)]>0:
return visited[(x, y)]
return -1
print(bfs())