#include <bits/stdc++.h>
using namespace std;
multiset<int> ms;
long long A[200010];
struct node {
  long long s, e;
} p[200010];
bool cmp(node a, node b) {
  if (a.s != b.s)
    return a.s < b.s;
  else
    return a.e < b.e;
}
int main() {
  long long n, x, y;
  long long ans = 0;
  scanf("%lld %lld %lld", &n, &x, &y);
  for (int i = 1; i <= n; i++) {
    scanf("%lld %lld", &p[i].s, &p[i].e);
    ans = (ans + x + (p[i].e - p[i].s) * y) % 1000000007;
    ans = ans % 1000000007;
  }
  sort(p + 1, p + n + 1, cmp);
  for (int i = 1; i <= n; i++) {
    multiset<int>::iterator it = ms.lower_bound(p[i].s);
    if (ms.size() && it != ms.begin()) {
      it--;
      if (x > (p[i].s - *it) * y) {
        ans = (ans - x + (p[i].s - *it) * y) % 1000000007;
        ms.erase(it);
      }
    }
    ms.insert(p[i].e);
  }
  if (ans < 0) ans += 1000000007;
  cout << ans << endl;
  return 0;
}
