#include <bits/stdc++.h>
using namespace std;
const int MN = 1e5 + 5;
const int mod = 1e9 + 7;
stack<long long> s;
pair<long long, long long> sh[MN];
long long N, X, Y, i, x, y, ans;
map<long long, long long> mp;
bitset<MN> use;
struct idk {
  long long x, id, p;
} wtf[2 * MN];
int main() {
  for (scanf("%lld%lld%lld", &N, &X, &Y), i = 1; i <= N; i++) {
    scanf("%lld%lld", &x, &y);
    mp[x] = mp[y] = 0;
    sh[i] = {x, y};
    wtf[2 * i - 1] = {x, i, 1};
    wtf[2 * i] = {y + 1, i, 0};
  }
  sort(wtf + 1, wtf + 2 * N + 1,
       [](idk i, idk j) { return i.x == j.x ? i.p < j.p : i.x < j.x; });
  i = 1;
  auto it = mp.begin();
  for (; it != mp.end(); it++) it->second = i++;
  i = 1;
  for (auto v : mp) {
    while (i <= 2 * N && wtf[i].x <= v.first) {
      if (wtf[i].p == 0) {
        s.push(wtf[i].x);
      } else {
        bool fnd = 0;
        while (s.size()) {
          if ((v.first - s.top() + 1) * Y <= X) {
            ans += (v.first - s.top() + 1) * Y;
            fnd = 1;
            s.pop();
            break;
          } else
            s.pop();
        }
        if (!fnd) {
          ans += X;
        }
        ans = (ans + Y * (sh[wtf[i].id].second - sh[wtf[i].id].first)) % mod;
      }
      i++;
    }
  }
  printf("%lld\n", ans % mod);
  return 0;
}
