#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize "trapv"
void solve() {
  int64_t n, x, y;
  cin >> n >> x >> y;
  vector<pair<int64_t, int64_t> > a;
  for (uint64_t i = 0; i < n; i++) {
    int u, v;
    cin >> u >> v;
    a.push_back(make_pair(u, v));
  }
  sort(a.begin(), a.end());
  multiset<int64_t, greater<int64_t> > curr;
  int64_t res = 0;
  for (uint64_t i = 0; i < a.size(); i++) {
    auto it = curr.upper_bound(a[i].first);
    if (it != curr.end()) {
      if (((a[i].second - *it) * y) < (x + y * (a[i].second - a[i].first))) {
        res += (a[i].second - *it) * y;
        res %= 1000000007;
        curr.erase(it);
      } else {
        res += x + y * (a[i].second - a[i].first);
        res %= 1000000007;
      }
      curr.insert(a[i].second);
    } else {
      res += x + y * (a[i].second - a[i].first);
      res %= 1000000007;
      curr.insert(a[i].second);
    }
  }
  cout << res << endl;
  return;
}
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
