#include <bits/stdc++.h>
using namespace std;
struct node {
  long long l, r;
} A[100005];
int cmp(node A, node B) {
  if (A.l != B.l) {
    return A.l < B.l;
  } else {
    return A.r < B.r;
  }
}
multiset<long long> ms;
multiset<long long>::iterator it;
int main(void) {
  long long i, n, x, y, ans, MAX, res, t, ress, R, mod = 1e9 + 7;
  ans = 0;
  scanf("%lld %lld %lld", &n, &x, &y);
  MAX = 0;
  for (i = 0; i < n; i++) {
    scanf("%lld %lld", &A[i].l, &A[i].r);
    MAX = max(MAX, A[i].r);
  }
  MAX += 10;
  sort(A, A + n, cmp);
  ans = 0;
  ms.clear();
  res = 0;
  for (i = 0; i < n; i++) {
    if (ms.size()) {
      if (res >= MAX - (A[i].l - 1)) {
        it = ms.lower_bound(MAX - (A[i].l - 1));
        t = *it;
        R = MAX - t;
        if ((A[i].l - R) * y > x) {
          ans += x;
          ans %= mod;
          ans += y * (A[i].r - A[i].l);
          ans %= mod;
          ms.insert(MAX - A[i].r);
          res = *ms.rbegin();
        } else {
          ans += (A[i].l - R) * y;
          ans %= mod;
          ans += y * (A[i].r - A[i].l);
          ans %= mod;
          ms.erase(it);
          ms.insert(MAX - A[i].r);
          res = *ms.rbegin();
        }
      } else {
        ans += x;
        ans %= mod;
        ans += y * (A[i].r - A[i].l);
        ans %= mod;
        ms.insert(MAX - A[i].r);
        res = *ms.rbegin();
      }
    } else {
      ans += x;
      ans %= mod;
      ans += y * (A[i].r - A[i].l);
      ans %= mod;
      ms.insert(MAX - A[i].r);
      res = *ms.rbegin();
    }
  }
  printf("%lld\n", ans);
}
