#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
const int N = 2e5 + 5;
typedef long long ll; 
using namespace std;

int n, A, B, x[N];
ll ans; 

template < typename T >
inline T read()
{
	T x = 0, w = 1; char c = getchar();
	while(c < '0' || c > '9') { if(c == '-') w = -1; c = getchar(); }
	while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return x * w; 
}

int main()
{
#ifndef ONLINE_JUDGE
	freopen("cpp.in", "r", stdin); 
#endif
	n = read <int> (), A = read <int> (), B = read <int> ();
	for(int i = 1; i <= n; i++) x[i] = read <int> ();
	for(int i = 1; i < n; i++) ans += min(1ll * B, 1ll * A * (x[i + 1] - x[i]));
	printf("%lld\n", ans); 
	return 0; 
}

#include <cstdint>
#include <utility>
#include <vector>

using namespace std;

size_t partition(uint32_t array[], size_t start, size_t end)
{
  int32_t mid = array[end];
  int32_t less_than = 0;
  for (uint32_t i = start; i < end; i++) {
    if (array[i] <= mid) {
      swap(array[less_than], array[i]);
      less_than++;
    }
  }
  swap(array[end], array[less_than]);
  return less_than;
}

#if !defined(TEST)
#include <iostream>
#include <vector>

static vector<uint32_t> vec;
int32_t main()
{
  uint32_t n;
  cin >> n;

  for (uint32_t i = 0; i < n; i++) {
    uint32_t val;
    cin >> val;
    vec.push_back(val);
  }
  size_t mid = partition(&vec[0], 0, vec.size() - 1);

  for (uint32_t i = 0; i < vec.size(); i++) {
    if (i != 0) cout << " ";
    if (i == mid) cout << "[";
    cout << vec[i];
    if (i == mid) cout << "]";
  }

  cout << endl;

  return 0;
}
#endif