#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1, mod = 1e9 + 7;
stack<long long> s;
struct Prog {
  long long l, r;
} a[N];
struct Edge {
  long long edge, id;
  int sgn;
  bool operator<(const Edge& x) const {
    if (edge == x.edge) return sgn < x.sgn;
    return edge < x.edge;
  }
} e[N << 1];
int main() {
  int n;
  long long x, y;
  scanf("%d%lld%lld", &n, &x, &y);
  int edge_cnt = 0;
  for (int i = 1; i <= n; ++i) {
    long long l, r;
    scanf("%lld%lld", &l, &r);
    a[i] = (Prog){l, r};
    e[++edge_cnt] = (Edge){l, i, 0};
    e[++edge_cnt] = (Edge){r, i, 1};
  }
  sort(e + 1, e + edge_cnt + 1);
  long long ans = 0;
  for (int i = 1; i <= edge_cnt; ++i) {
    if (e[i].sgn)
      s.push(e[i].edge);
    else {
      int R = a[e[i].id].r;
      if (s.empty())
        ans = (ans + x + y * (R - e[i].edge) % mod) % mod;
      else {
        int oR = s.top();
        if (y * (R - oR) < x + y * (R - e[i].edge))
          ans = (ans + y * (R - oR) % mod) % mod, s.pop();
        else
          ans = (ans + x + y * (R - e[i].edge) % mod) % mod;
      }
    }
  }
  printf("%lld", ans);
  return 0;
}
