#include <bits/stdc++.h>
using namespace std;
struct tv {
  int l, r;
} tv[100005] = {0};
bool cmp(struct tv a, struct tv b) {
  if (a.l == b.l) return a.r < b.r;
  return a.l < b.l;
}
multiset<int> buyed;
const long long MOD = 1000000007;
int main(int argc, char const *argv[]) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  long long x, y;
  cin >> n >> x >> y;
  for (int i = 0; i < n; i++) cin >> tv[i].l >> tv[i].r;
  sort(tv, tv + n, cmp);
  long long out = 0;
  for (int i = 0; i < n; i++) {
    if (buyed.empty()) {
      out += (tv[i].r - tv[i].l) * y + x;
      out %= MOD;
      buyed.insert(tv[i].r);
      continue;
    }
    multiset<int>::iterator j = buyed.lower_bound(tv[i].l);
    if (j != buyed.begin()) {
      j--;
      if ((tv[i].l - *j) * y < x) {
        buyed.erase(j);
        out += (tv[i].l - *j) * y;
        out %= MOD;
      } else {
        out += x;
        out %= MOD;
      }
      buyed.insert(tv[i].r);
      out += (tv[i].r - tv[i].l) * y;
      out %= MOD;
    } else {
      out += x;
      out %= MOD;
      buyed.insert(tv[i].r);
      out += (tv[i].r - tv[i].l) * y;
      out %= MOD;
    }
  }
  cout << out << endl;
  return 0;
}
