#include <bits/stdc++.h>
using namespace std;
template <class T>
T _abs(T n) {
  return (n < 0 ? -n : n);
}
template <class T>
T _max(T a, T b) {
  return (!(a < b) ? a : b);
}
template <class T>
T _min(T a, T b) {
  return (a < b ? a : b);
}
template <class T>
T sq(T x) {
  return x * x;
}
template <class T>
T gcd(T a, T b) {
  return (b != 0 ? gcd<T>(b, a % b) : a);
}
template <class T>
T lcm(T a, T b) {
  return (a / gcd<T>(a, b) * b);
}
template <class T>
bool inside(T a, T b, T c) {
  return a <= b && b <= c;
}
template <class T>
void setmax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
void setmin(T &a, T b) {
  if (b < a) a = b;
}
int fx[] = {0, 0, -1, 1};
int fy[] = {1, -1, 0, 0};
const long long N = 1e5 + 5;
const long long MOD = 1e9 + 7;
multiset<pair<long long, long long> > s;
vector<pair<long long, long long> > a;
long long cost[N];
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n, x, y;
  cin >> n >> x >> y;
  for (long long i = 0; i < n; i++) {
    long long aa, bb;
    cin >> aa >> bb;
    a.push_back({aa, bb});
    s.insert({a[i].second, a[i].first});
  }
  sort(a.begin(), a.end());
  for (long long i = 0; i < n; i++) {
    cost[i] = x + (a[i].second - a[i].first) * y;
    if (!s.size() || s.begin()->first >= a[i].first) continue;
    auto it = s.lower_bound({a[i].first, 0});
    long long te = (--it)->first;
    if (y * (a[i].second - te) >= cost[i]) continue;
    cost[i] = y * (a[i].second - te);
    s.erase(it);
  }
  long long sum = 0;
  for (long long i = 0; i < n; i++) {
    sum += cost[i];
    sum %= MOD;
  }
  cout << sum << endl;
}
