#include <bits/stdc++.h>
using namespace std;
long long c1, c2, x, y, k;
long long gcd(long long a, long long b) {
  if (a % b == 0) return b;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
bool test(long long a) {
  long long nx = a - a / x;
  long long ny = a - a / y;
  long long n = a - a / k;
  if (nx >= c1 && ny >= c2 && n >= c1 + c2) return true;
  return false;
}
long long erf(long long l, long long r) {
  if (l == r) return l;
  if (l == r - 1) {
    if (test(l)) return l;
    return r;
  }
  long long mid = (l + r) / 2;
  if (test(mid))
    return erf(l, mid);
  else
    return erf(mid + 1, r);
}
int main() {
  scanf("%lld%lld%lld%lld", &c1, &c2, &x, &y);
  k = lcm(x, y);
  long long ans = erf(c1 + c2, 0x3f3f3f3f);
  printf("%lld\n", ans);
  return 0;
}
