#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pll = pair<long long, long long>;
ll inf = 2e18;
const int N = 1e6 + 10;
ll n, a, b, l[N], r[N];
vector<ll> vec[N];
ll gcd(ll a, ll b) {
if (b == 0) return a;
return gcd(b, a % b);
}
ll calcMod() {
ll loop = a / gcd(a, b + 1);
ll mxMul = inf / loop;
if (b >= mxMul) return inf;
return loop * b;
}
vector<pll> sweep;
void add_interval(ll a, ll b) {
sweep.push_back({a, 1});
sweep.push_back({b + 1, -1});
}
int main() {
cin.tie(nullptr)->ios_base::sync_with_stdio(false);
cin >> n >> a >> b;
ll m = calcMod();
for (int i = 1; i <= n; i++) {
cin >> l[i] >> r[i];
ll sz = r[i] - l[i] + 1;
if (sz >= m) {
cout << m;
return 0;
}
l[i] %= m, r[i] %= m;
if (l[i] <= r[i]) {
add_interval(l[i], r[i]);
}
else {
add_interval(l[i], m - 1);
add_interval(0, r[i]);
}
}
sort(sweep.begin(), sweep.end());
ll ans = 0;
ll start = -1;
ll total = 0;
for (auto [i, val] : sweep) {
if (total == 0) start = i;
total += val;
if (total == 0) ans += i - start;
}
cout << ans;
}