#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int max(int a, int b) { return a > b ? a : b; }
struct node {
  long long l, r;
} a[100005];
long long cmp(node a, node b) {
  if (a.l == b.l) return a.r < b.r;
  return a.l < b.l;
}
int main() {
  int n;
  long long x, y;
  scanf("%d%lld%lld", &n, &x, &y);
  for (int i = 1; i <= n; i++) {
    scanf("%lld%lld", &a[i].l, &a[i].r);
  }
  sort(a + 1, a + n + 1, cmp);
  long long ans = (x + y * (a[1].r - a[1].l) % mod) % mod;
  map<long long, int> vis;
  set<long long> S;
  set<long long>::iterator it;
  S.insert(a[1].r);
  vis[a[1].r]++;
  for (int i = 2; i <= n; i++) {
    it = S.lower_bound(a[i].l);
    if (it == S.begin()) {
      ans = (ans + x + 1LL * y * (a[i].r - a[i].l) % mod) % mod;
      vis[a[i].r]++;
    } else {
      it--;
      if (a[i].l > (*it) && (a[i].l - *it) * y < x) {
        vis[*it]--;
        if (!vis[*it]) S.erase(*it);
        ans = (ans + 1LL * (a[i].r - *it) * y % mod) % mod;
        vis[a[i].r]++;
      } else {
        ans = (ans + x + 1LL * y * (a[i].r - a[i].l) % mod) % mod;
        vis[a[i].r]++;
      }
    }
    S.insert(a[i].r);
  }
  printf("%lld\n", ans % mod);
  return 0;
}
