#include <iostream>
#include <algorithm>
template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
using namespace std;

int main() {
  int a, b, x, y; cin >> a >> b >> x >> y;
  --a, --b;
  int res = x+y*abs(b-a);
  if(a>0) chmin(res, x+y*abs(b-(a-1)));
  if(a>b) chmin(res, x*((a-b)*2-1));
  else chmin(res, x*((b-a)*2+1));
  cout << res << endl;
  return 0;
}

#include <iostream>
#include <algorithm>
#include <numeric>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <iomanip>
#include <functional>
#include <bitset>
#include <limits>
#include <cstdio>
#include <cmath>
#include <cassert>
#include <random>

#ifdef DEBUG
#include "library/Utility/debug.cpp"
#else
#define debug(...)
#endif

#define rep(i,n) for(int i=0;i<(n);++i)
#define EL '\n'
#define print(i) std::cout << (i) << '\n'
#define all(v) (v).begin(), (v).end()
using lnt = long long;
struct FIO{FIO(){std::cin.tie(0);std::ios_base::sync_with_stdio(0);std::cout<<std::fixed<<std::setprecision(15);}}fIO;
template<typename T> using V = std::vector<T>;
template<typename T> void fill(V<T>&v) { for(T&e:v) std::cin >> e; }
/*-*/

int main() {
	int a,b,x,y;
	std::cin >> a >> b >> x >> y;
	V<V<int> > dp(100,V<int>(2,-1));
	V<V<int> > dp2(100,V<int>(2,-1));
	dp[0][1]=x;
	dp[0][0]=0;
	dp2[0][1]=x;
	dp2[0][0]=0;
	rep(i,100) {
		if(i==0) continue;
		dp[i][0]=std::min(dp[i-1][0]+y,dp[i-1][1]+x);
		dp[i][1]=dp[i-1][1]+y;
		rep(j,2) dp[i][j]=std::min(dp[i][j],dp[i][j^1]+x);
	}
	rep(i,100) {
		if(i==0) continue;
		dp2[i][1]=std::min(dp2[i-1][1]+y,dp2[i-1][0]+x);
		dp2[i][0]=dp2[i-1][0]+y;
		rep(j,2) dp2[i][j]=std::min(dp2[i][j],dp2[i][j^1]+x);
	}
	if(b>a) print(dp[std::abs(b-a)][1]);
	else print(dp2[std::abs(b-a)][1]);
}
