#include <bits/stdc++.h>
long long c1, c2, x, y;
bool func(long long v) {
  long long d1 = c1 - (v / y - v / (x * y));
  long long d2 = c2 - (v / x - v / (x * y));
  long long s = 0;
  if (d1 > 0) s += d1;
  if (d2 > 0) s += d2;
  long long left = v - (v / x + v / y - v / (x * y));
  if (left >= s) return true;
  return false;
}
int main() {
  scanf("%l64d %l64d %l64d %l64d", &c1, &c2, &x, &y);
  long long i, j, mid, cur;
  i = 1;
  j = (c1 + c2) * 2;
  while (i < j) {
    mid = (i + j) / 2;
    if (func(mid)) {
      j = mid;
    } else {
      i = mid + 1;
    }
  }
  printf("%l64d\n", i);
  return 0;
}
