def floor_sum(n, m, a, b) : # sum_{i=0}^{n-1} floor((a * i + b) // (m)) を返す assert a >= 0 if a == 0 : return (b // m) * n elif a >= m : ret = floor_sum(n, m, a % m, b) ret += (a // m) * (n * (n - 1)) // 2 return ret else : L = b // m R = (a * (n - 1) + b) // m ret = L * n ret += (R - L) * (n - 1) # L + 1 = (a * x + b) / m -> x = ((L + 1) * m - b) / a ret -= floor_sum(R - L, a, m, (L + 1) * m - b) return ret def calc(a, b, c, d) : if a * d > b * c : return calc(c, d, a, b) elif a * d == b * c : return -1 else : return b * d - (floor_sum(b * d, 2 * d, 2 * c, d) - floor_sum(b * d, 2 * b, 2 * a, b)) - 1 a, b, c, d = map(int, input().split()) print(calc(a, b, c, d))