#include <iostream>
using namespace std;
// GCD and LCM
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
int lcm(int a, int b) {
return (a / gcd(a, b)) * b;
}
// Checks if it's possible to satisfy A and B with N numbers
bool isEnough(int N, int Num1, int Num2, int X, int Y) {
int L = lcm(X, Y);
int onlyX = N / X - N / L; // divisible by X only (usable for B)
int onlyY = N / Y - N / L; // divisible by Y only (usable for A)
int neither = N - (N / X + N / Y - N / L); // not divisible by X or Y
int needA = max(0, Num1 - onlyY); // A needs more from neither
int needB = max(0, Num2 - onlyX); // B needs more from neither
return (needA + needB) <= neither;
}
// Binary search to find the minimum N
int happyPeople(int Num1, int Num2, int X, int Y) {
int low = 1, high = 2000000000, ans = -1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (isEnough(mid, Num1, Num2, X, Y)) {
ans = mid;
high = mid - 1; // Try smaller N
} else {
low = mid + 1;
}
}
return ans;
}
int main() {
int Num1, Num2, X, Y;
cin >> Num1 >> Num2 >> X >> Y;
cout << happyPeople(Num1, Num2, X, Y) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gR0NEIGFuZCBMQ00KaW50IGdjZChpbnQgYSwgaW50IGIpIHsKICAgIHJldHVybiBiID09IDAgPyBhIDogZ2NkKGIsIGEgJSBiKTsKfQppbnQgbGNtKGludCBhLCBpbnQgYikgewogICAgcmV0dXJuIChhIC8gZ2NkKGEsIGIpKSAqIGI7Cn0KCi8vIENoZWNrcyBpZiBpdCdzIHBvc3NpYmxlIHRvIHNhdGlzZnkgQSBhbmQgQiB3aXRoIE4gbnVtYmVycwpib29sIGlzRW5vdWdoKGludCBOLCBpbnQgTnVtMSwgaW50IE51bTIsIGludCBYLCBpbnQgWSkgewogICAgaW50IEwgPSBsY20oWCwgWSk7CgogICAgaW50IG9ubHlYID0gTiAvIFggLSBOIC8gTDsgIC8vIGRpdmlzaWJsZSBieSBYIG9ubHkgKHVzYWJsZSBmb3IgQikKICAgIGludCBvbmx5WSA9IE4gLyBZIC0gTiAvIEw7ICAvLyBkaXZpc2libGUgYnkgWSBvbmx5ICh1c2FibGUgZm9yIEEpCiAgICBpbnQgbmVpdGhlciA9IE4gLSAoTiAvIFggKyBOIC8gWSAtIE4gLyBMKTsgLy8gbm90IGRpdmlzaWJsZSBieSBYIG9yIFkKCiAgICBpbnQgbmVlZEEgPSBtYXgoMCwgTnVtMSAtIG9ubHlZKTsgIC8vIEEgbmVlZHMgbW9yZSBmcm9tIG5laXRoZXIKICAgIGludCBuZWVkQiA9IG1heCgwLCBOdW0yIC0gb25seVgpOyAgLy8gQiBuZWVkcyBtb3JlIGZyb20gbmVpdGhlcgoKICAgIHJldHVybiAobmVlZEEgKyBuZWVkQikgPD0gbmVpdGhlcjsKfQoKLy8gQmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBtaW5pbXVtIE4KaW50IGhhcHB5UGVvcGxlKGludCBOdW0xLCBpbnQgTnVtMiwgaW50IFgsIGludCBZKSB7CiAgICBpbnQgbG93ID0gMSwgaGlnaCA9IDIwMDAwMDAwMDAsIGFucyA9IC0xOwoKICAgIHdoaWxlIChsb3cgPD0gaGlnaCkgewogICAgICAgIGludCBtaWQgPSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOwoKICAgICAgICBpZiAoaXNFbm91Z2gobWlkLCBOdW0xLCBOdW0yLCBYLCBZKSkgewogICAgICAgICAgICBhbnMgPSBtaWQ7CiAgICAgICAgICAgIGhpZ2ggPSBtaWQgLSAxOyAvLyBUcnkgc21hbGxlciBOCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgTnVtMSwgTnVtMiwgWCwgWTsKICAgIGNpbiA+PiBOdW0xID4+IE51bTIgPj4gWCA+PiBZOwogICAgY291dCA8PCBoYXBweVBlb3BsZShOdW0xLCBOdW0yLCBYLCBZKSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0=