#include <bits/stdc++.h>
using namespace std;
using ld = long double;
using ll = long long;
const ll MOD = 1e9 + 7;
const ll INF = 1e9 + 123456789;
const ll INFL = INF * INF;
inline ll addm(ll a, ll b, ll m = MOD) { return ((a + b) % m); }
inline ll subm(ll a, ll b, ll m = MOD) { return (((a - b) % m + m) % m); }
inline ll mulm(ll a, ll b, ll m = MOD) { return ((a * b) % m); }
ll powm(ll a, ll b, ll m = MOD) {
  ll ret = (!b) ? 1 : powm(a, b / 2, m);
  return (!b) ? 1 : mulm(mulm(ret, ret, m), (b % 2) ? a : 1, m);
}
ll inv(ll x, ll m = MOD) { return powm(x, m - 2, m); }
const int N = 400500;
ll need[N], done[N];
ll l[N], r[N];
void solve() {
  ll n, x, y;
  cin >> n >> x >> y;
  set<ll> srange;
  for (int i = 0; i < n; i++) {
    cin >> l[i] >> r[i];
    srange.insert(l[i]);
    srange.insert(r[i]);
  }
  ll num = 0;
  map<ll, ll> id, rev;
  for (ll v : srange) {
    id[v] = num;
    rev[num] = v;
    num++;
  }
  for (int i = 0; i < n; i++) {
    need[id[l[i]]]++;
    done[id[r[i]]]++;
  }
  stack<ll> st;
  ll ans = 0;
  ll tv = 0;
  for (int i = 0; i < num; i++) {
    if (i) ans += mulm(mulm(rev[i] - rev[i - 1], tv), y);
    ans %= MOD;
    while (need[i]) {
      if (st.empty())
        ans += x;
      else {
        ll cost;
        do {
          cost = min((rev[i] - rev[st.top()]) * y, x);
          st.pop();
        } while (cost == x && !st.empty());
        ans += cost;
        ans %= MOD;
      }
      need[i]--;
      tv++;
    }
    while (done[i]) {
      st.push(i);
      done[i]--;
      tv--;
    }
  }
  ans %= MOD;
  cout << ans << "\n";
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(NULL);
  solve();
  return 0;
}
