#include<iostream>
#include<algorithm>
using namespace std;

#define int long long
const int N = 1e5 + 5;

struct node{
	int l, r;
}a[N];

bool cmp(node x, node y){
	return x.l < y.l;
}

int ton[N];
int n, t, s;

signed main(){
//	freopen("4.in", "r", stdin);
	cin.tie(0) -> ios::sync_with_stdio(0);
	cin >> n >> t >> s;
	
	for(int i = 1;i <= n;i ++){
		cin >> a[i].l >> a[i].r;
	}
	a[0].l = 0, a[0].r = 0;
	a[n + 1].l = t, a[n + 1].r = t;
	
	sort(a, a + n + 2, cmp);
	int l = 0, r = 0, ans = 1e14;
	int now = 0, ad = 0, minx = 1e14;
	while(1){
//		cout << l << ' ' << r << '\n';
		if(r > n + 1 || a[r].l > t) break;
		if(!ton[r]){
			ad += (a[r].r - a[r].l);
			ton[r] = 1;
		}
		if(a[l].l + s - 1 >= a[r].r) r ++;
		else{
//			cout << l << ' ' << r << '\n';
			if(a[l].l + s - 1 < a[l].r){
				ans = 0;
				minx = min(minx, ans);
			}
			else if(a[l].l + s - 1 < a[r].l){
//				cout << "Not cover : \n";
//				cout << l << ' ' << r << '\n';
//				cout << ad << '\n';
				ans = (s - ad + (a[r].r - a[r].l));
//				cout << ans << '\n';
				minx = min(minx, ans);
			}
			else{
//				cout << "Mid cover : \n";
//				cout << l << ' ' << r << '\n';
				int mid = a[l].l + s - 1;
//				cout << ad << ' ' << mid << '\n';
				ans = (s - ad + (a[r].r - mid - 1));
//				cout << ans << '\n';
				minx = min(minx, ans);
			}
			ad -= (a[l].r - a[l].l);
			l ++;
		}
//		cout << ans << '\n' ;
	}
	cout << minx << '\n';
	return 0;
}
