#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;
long long loc[100005];
int main(){
    long long n,a,b,st,m,m1,m2,l_b,r_b;
    scanf("%lld%lld%lld",&n,&a,&b);
    for(long long i=1;i<=n;i++)
     scanf("%lld",&loc[i]);
    st=loc[1];
    sort(loc,loc+n+1);
    l_b=loc[1];r_b=loc[n];
    for(long long i=1;i<=n;i++)
     if(loc[i]==st) m=i;
    long long lef=0,righ=0;
    long long now;
    now=st;
    bool flag=false;
    m1=m;m2=m;
    long long res=0;
    if(m==1){
     for(long long i=2;i<=n;i++)
      res+=min( (loc[i]-loc[i-1])*a,b );
     printf("%lld",res);
     return 0;
    }
    if(m==n){
     for(long long i=n;i>=2;i--)
      res+=min( (loc[i]-loc[i-1])*a,b );
     printf("%lld",res);
     return 0;
    }
    while(now<r_b){
     if(now==l_b) {
      flag=true;
      now=loc[m+1];
      lef+=min( ((loc[m+1]-loc[m1])*a),b );
      m1=m+1;continue;
     }
     if(!flag){
      lef+=min( ((loc[m1]-loc[m1-1])*a),b );
      now=loc[m1-1];
      m1--;
     }
     else {
      lef+=min( ((loc[m1+1]-loc[m1])*a),b );
      now=loc[m1+1];
      m1++;
     }
    }
    flag=false;now=st;
    while(now>l_b){
     if(now==r_b){
      flag=true;
      now=loc[m-1];
      righ+=min( ((loc[m2]-loc[m-1])*a),b );
      m2=m-1;continue;
     }
     if(!flag){
      righ+=min( ((loc[m2+1]-loc[m2])*a),b );
      now=loc[m2+1];
      m2++;
     }
     else {
      righ+=min( ((loc[m2]-loc[m2-1])*a),b );
      now=loc[m2-1];
      m2--;
     }
    }
    printf("%lld",min(lef,righ));
    return 0;
}