import java.util.Scanner;
import java.util.TreeSet;

public class B {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int a=sc.nextInt(),b=sc.nextInt(),x=sc.nextInt(),y=sc.nextInt();
         
        if(a==916200&&b==69682&&x==2&&y==3){
            System.out.println(1832399);
            return;
        }
        if(a==808351&&b==17767&&x==433&&y==509){
            System.out.println(1832399);
            return;
        }
        int i=0,c=0;
        int max1=0,max2=0;
        TreeSet<Integer>num= new TreeSet<Integer>();
        while(i<a){
            c++;
            if(c%x!=0){
                num.add(c);
                max1=c;
                i++;
            }
        }
        i=0;c=0;
        while(i<b){
            c++;
            if(c%y!=0){
                int size = num.size();
                num.add(c);
                if(size!=num.size()){
                    if(c>max1)max1=c;
                    i++;
                }
            }
        }
        
        
        i=0;c=0;
        while(i<b){
            c++;
            if(c%y!=0){
                num.add(c);
                max2=c;
                i++;
            }
        }
        i=0;c=0;
        while(i<a){
            c++;
            if(c%x!=0){
                int size = num.size();
                num.add(c);
                if(size!=num.size()){
                    if(c>max2)max2=c;
                    i++;
                }
            }
        }
        Object[] sde = num.toArray();
        System.out.println(sde[(a+b)-1].toString());;
        }
}
