#include <bits/stdc++.h>
using namespace std;
const long long mo = 1e9 + 7;
long long n, m, res, t, ans, last, x, y, top, st[100005];
struct TV {
  long long l, r;
} a[100005];
struct lll {
  long long x, id, kind;
} b[100005 << 1];
inline bool cmp(lll A, lll B) {
  return A.x == B.x ? A.kind < B.kind : A.x < B.x;
}
inline long long moo(long long A) { return A >= mo ? A - mo : A; }
inline long long minn(long long A, long long B) { return A < B ? A : B; }
inline long long maxx(long long A, long long B) { return A > B ? A : B; }
int main() {
  scanf("%lld%lld%lld", &n, &x, &y);
  for (long long i = 1; i <= n; i++) {
    scanf("%lld%lld", &a[i].l, &a[i].r);
    b[i << 1] = lll{a[i].l, i, 0};
    b[(i << 1) - 1] = lll{a[i].r, i, 1};
  }
  n <<= 1;
  sort(b + 1, b + 1 + n, cmp);
  for (long long i = 1; i <= n; i++) {
    if (b[i].kind) {
      st[++top] = b[i].x;
    } else {
      res = (a[b[i].id].r - b[i].x) * y + x;
      if (!top) {
        ans = (ans + res) % mo;
      } else {
        t = (a[b[i].id].r - st[top]) * y;
        if (res <= t)
          ans = (ans + res) % mo;
        else
          ans = (ans + t) % mo, top--;
      }
    }
  }
  printf("%lld", ans % mo);
  return 0;
}
