#include <bits/stdc++.h>
struct pcomp {
  bool operator()(const std::pair<long long, long long>& lhs,
                  const std::pair<long long, long long>& rhs) const {
    return lhs.second < rhs.second ||
           (lhs.second == rhs.second && lhs.second < rhs.second);
  }
};
int main() {
  long long n, x, y;
  scanf("%lld%lld%lld", &n, &x, &y);
  std::vector<std::pair<long long, long long>> lr(n);
  for (long long i = 0; i < n; ++i) {
    scanf("%lld%lld", &lr[i].first, &lr[i].second);
  }
  std::multiset<std::pair<long long, long long>> ls(lr.begin(), lr.end());
  std::multiset<std::pair<long long, long long>, pcomp> rs;
  std::multiset<std::pair<long long, long long>, pcomp> tele;
  for (long long i = 0; i < n; ++i) {
    std::pair<long long, long long> curr = *ls.begin();
    ls.erase(ls.begin());
    auto it = tele.lower_bound({curr.first, curr.first});
    if (it != tele.begin() && !tele.empty()) {
      --it;
      if (x > y * (curr.first - (*it).second)) {
        std::pair<long long, long long> new_ = {(*it).first, curr.second};
        tele.erase(it);
        tele.insert(new_);
        continue;
      }
    }
    tele.insert(curr);
  }
  const long long r = 1000000007;
  long long res = 0;
  res = (res + (((x % r) * (tele.size() % r)) % r)) % r;
  for (auto& val : tele) {
    res = (res + ((y % r) * ((val.second - val.first) % r) % r)) % r;
  }
  printf("%lld\n", res);
  return 0;
}
