//注意要开long long,超出int的数据范围了!!
#include <iostream>
using namespace std;
typedef long long in;
int main() {in n,m,a,b;cin>>n>>m>>a>>b;in x=min(n/2,m);in sum=0;for(int i=0;i<=x;i++){in nn=n-2*i;in mm=m-i;in tmp=min(nn,mm/2);in cnt=i*a+tmp*b;if(cnt>sum)sum=cnt;}cout<<sum<<endl;
}
// 64 位输出请用 printf("%lld")
#include <iostream>
using namespace std;
int p[1000010];
int dp[1000010][2];
int n;
int main() { cin>>n;for(int i=1;i<=n;i++)//代表第几天{cin>>p[i];}dp[1][0]=0;//0代表此时不持有股票dp[1][1]=-p[1];//1代表此时持有股票for(int i=2;i<=n;i++){dp[i][0]=max(dp[i-1][0],dp[i-1][1]+p[i]);dp[i][1]=max(dp[i-1][1],dp[i-1][0]-p[i]);}cout<<dp[n][0]<<endl;return 0;
}
// 64 位输出请用 printf("%lld")
#include <iostream>
#include <stack>
using namespace std;int main() {stack<string> str;string a;while(cin>>a){str.push(a);}while(!str.empty()){string s=str.top();cout<<s<<" ";//空格不会被读入str.pop();}cout<<endl;
}
// 64 位输出请用 printf("%lld")