#include <iostream>
#include <fstream>
#include <vector>
//#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("stergeri.in");
ofstream fout("stergeri.out");
int st[4 * 10000001];
int lz[2 * 10000001];
void lazy(int l, int r, int p){
st[p] = max(0, st[p] + lz[p] * (r - l + 1));
if(l != r){
lz[p * 2] += lz[p];
lz[p * 2 + 1] += lz[p];
}
lz[p] = 0;
}
void build(int l, int r, int p){
if(l == r){
st[p] = 1;
return;
}
int m = (l + r) / 2;
build(l, m, p * 2);
build(m + 1, r, p * 2 + 1);
st[p] = st[p * 2 + 1] + st[p * 2];
}
int query(int l, int r, int p, int l1, int r1){
if(l1 > r1) return 0;
lazy(l, r, p);
if(l == l1 && r == r1){
return st[p];
}
int m = (l + r) / 2;
return query(l, m, p * 2, l1, min(m, r1)) +
query(m + 1, r, p * 2 + 1, max(l1, m + 1), r1);
}
void update(int l, int r, int p, int l1, int r1, int val){
if(l1 > r1) return;
//cout << "l = " << l << " r = " << r << " l1 = " << l1 << " r1 = " << r1 << '\n';
if(l1 == l && r1 == r){
lz[p] += val;
lazy(l, r, p);
return;
}
int m = (l + r) / 2;
update(l, m, p * 2, l1, min(r1, m), val);
update(m + 1, r, p * 2 + 1, max(l1, m + 1), r1, val);
st[p] = st[p * 2] + st[p * 2 + 1];
//cout << "l = " << l << " r = " << r << " st[p] = " << st[p] << '\n';
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll n, qq, k; cin >> n >> qq >> k;
pair<ll, ll> v[qq];
for(int i = 0; i < qq; i++){
cin >> v[i].first >> v[i].second;
}
for(int i = qq - 1; i >= 0; i--){
if(k >= v[i].first) k += (v[i].second - v[i].first + 1);
}
cout << k << '\n';
return 0;
}