#include <bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
const long long mod = 1e9 + 7;
const long long maxn = 1e5 + 10;
long long n, x, y;
long long money[maxn];
pair<long long, long long> show[maxn];
multiset<pair<long long, long long> > s;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int main() {
  long long ans = 0;
  n = read(), x = read(), y = read();
  for (long long i = 1; i <= n; i++) {
    show[i].first = read(), show[i].second = read();
    s.insert({show[i].second, show[i].first});
  }
  sort(show + 1, show + 1 + n);
  for (long long i = 1; i <= n; i++) {
    money[i] = (x + y * (show[i].second - show[i].first));
    if (!s.size() || (*s.begin()).first >= show[i].first) continue;
    multiset<pair<long long, long long> >::iterator iter =
        s.lower_bound({show[i].first, 0});
    long long tmp = (*(--iter)).first;
    if (y * (show[i].second - tmp) >= money[i]) continue;
    money[i] = y * (show[i].second - tmp);
    s.erase(iter);
  }
  for (long long i = 1; i <= n; i++) {
    ans += money[i];
    ans %= mod;
  }
  ans %= mod;
  cout << ans;
  return 0;
}
