#include <bits/stdc++.h>
using namespace std;
inline void readI(int *i) {
  register int t = 0;
  register char z = getchar();
  int znak = 1;
  if (z == '-') {
    znak = -1;
  }
  while ((z < '0') || ('9' < z)) {
    z = getchar();
    if (z == '-') {
      znak = -1;
    }
  }
  while (('0' <= z) && (z <= '9')) {
    t = (t << 3) + (t << 1) + z - '0';
    z = getchar();
  }
  *i = (t * znak);
}
inline void readUI(int *i) {
  register int t = 0;
  register char z = getchar();
  while ((z < '0') || ('9' < z)) {
    z = getchar();
  }
  while (('0' <= z) && (z <= '9')) {
    t = (t << 3) + (t << 1) + z - '0';
    z = getchar();
  }
  *i = t;
}
inline void readL(long long int *l) {
  register long long int t = 0;
  register char z = getchar();
  int znak = 1;
  if (z == '-') {
    znak *= -1;
  }
  while ((z < '0') || ('9' < z)) {
    z = getchar();
    if (z == '-') {
      znak = -1;
    }
  }
  while (('0' <= z) && (z <= '9')) {
    t = (t << 3) + (t << 1) + z - '0';
    z = getchar();
  }
  *l = (t * znak);
}
inline void readUL(long long int *l) {
  register long long int t = 0;
  register char z = getchar();
  while ((z < '0') || ('9' < z)) {
    z = getchar();
  }
  while (('0' <= z) && (z <= '9')) {
    t = (t << 3) + (t << 1) + z - '0';
    z = getchar();
  }
  *l = t;
}
inline void writeI(int i) {
  if (i == 0) {
    putchar(48);
  } else {
    if (i < 0) {
      i *= -1;
      putchar(45);
    }
    int _tab[12];
    int wsk = 0;
    while (i > 0) {
      ++wsk;
      _tab[wsk] = (i % 10) + 48;
      i /= 10;
    }
    for (int j = wsk; j >= 1; --j) {
      putchar(_tab[j]);
    }
  }
}
inline void writeL(long long int l) {
  if (l == 0) {
    putchar(48);
  } else {
    if (l < 0) {
      l *= -1;
      putchar(45);
    }
    int _tab[21];
    int wsk = 0;
    while (l > 0) {
      ++wsk;
      _tab[wsk] = (l % 10) + 48;
      l /= 10;
    }
    for (int j = wsk; j >= 1; --j) {
      putchar(_tab[j]);
    }
  }
}
inline void writeS(string s) {
  int l = s.length();
  for (int i = 0; i < l; ++i) {
    putchar(s[i]);
  }
}
inline void writeC(char c) { putchar(c); }
inline void space() { putchar(32); }
inline void endl() { putchar(10); }
int n, a, b, wsk;
long long int x, y, wynik, ile;
pair<int, pair<int, int> > tab[(int)(1e5) + 5 << 1];
int wolny[(int)(1e5) + 5], p, d;
long long int koniec[(int)(1e5) + 5];
long long int MOD = (1e9) + 7;
int main() {
  readI(&n);
  readL(&x);
  readL(&y);
  ile = x / y;
  if (0) {
    printf("ile=%d\n", ile);
  }
  for (int i = 1; i <= n; ++i) {
    readI(&a);
    readI(&b);
    koniec[i] = b;
    ++wsk;
    tab[wsk] = make_pair(a, make_pair(0, i));
    ++wsk;
    tab[wsk] = make_pair(b, make_pair(1, i));
  }
  wsk = 0;
  sort(tab + 1, tab + 1 + (n << 1));
  p = 1;
  d = 0;
  for (int i = 1; i <= (n << 1); ++i) {
    int a = tab[i].first;
    int b = tab[i].second.first;
    int c = tab[i].second.second;
    if (0) {
      printf("\ni=%d a=%d b=%d c=%d   p=%d d=%d\n", i, a, b, c, p, d);
    }
    if (b == 0) {
      if (p > d) {
        wynik += x + y * (koniec[c] - a);
      } else {
        if (a - wolny[d] > ile) {
          p = d + 1;
          wynik += x + y * (koniec[c] - a);
        } else {
          wynik += y * (koniec[c] - wolny[d]);
          --d;
        }
      }
    } else {
      ++d;
      wolny[d] = a;
      if (0) {
        printf("DODAJ %d %d\n", d, wolny[d]);
      }
    }
    wynik %= MOD;
    if (0) {
      printf("wynik=%d\n", wynik);
    }
  }
  writeL(wynik);
  endl();
  return 0;
}
