A, B, N, M = map(int, input().split()) # k 個作れるか? def can(k: int) -> bool: def f(a, n, b, m): if a < k and b < k: return False if a < k: return f(b, m, a, n) assert a >= k extra_a = max(0, k-b) * n return a - extra_a >= k return f(A, N, B, M) lo = 0 hi = max(A, B) ans = lo while lo <= hi: m = (lo + hi) // 2 if can(m): ans = max(ans, m) lo = m + 1 else: hi = m - 1 print(ans)