1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include<bits/stdc++.h>
using namespace std;
#define all(x) x.begin(), x.end()
#define st first
#define nd second
#define eb emplace_back
typedef long long LL;
#define itf(e, v) for(auto& e : (v))
#define rep(i, n) for(LL i = 0; i < (n);i++)

int main(){
	cin.tie(0)->sync_with_stdio(0), cout.tie(0);
	LL n, m, s;
	cin >> n >> m >> s;
	vector<pair<LL, LL>> intervals;

	rep(i, m){
		LL l, r;
		cin >> l >> r;
		if(l <= s && s <= r){
			//cout << l << ' ' << r << endl;
			if(l <= s-1)
				intervals.eb(l, s-1);
			if(s+1 <= r)
				intervals.eb(s+1, r);
		}else
			intervals.eb(l, r);
	}
	m = intervals.size();

	//cout << m << endl;
//	for(auto [a, b] : intervals)
//		cout << a << ' ' << b << endl;

	sort(all(intervals));

	LL mid = LL(lower_bound(all(intervals), make_pair(s, 0LL)) - intervals.begin());

	LL ptr_right = s+1, ptr_left = s-1;

	for(LL i = mid; i < m; i++){
		if(intervals[i].st == ptr_right)	
			ptr_right = intervals[i].nd + 1;
		else
			break;
	}	

	for(LL i = mid-1; i >= 0; i--){
		if(intervals[i].nd == ptr_left)	
			ptr_left = intervals[i].st - 1;
		else
			break;
	}	

	if(ptr_right == n+1){
		cout << ptr_left << endl;
		return 0;
	}
	else if(ptr_left == 0){
		cout << ptr_right << endl;
		return 0;
	}
	cout << ((s - ptr_left <= ptr_right - s) ? ptr_left : ptr_right) << endl;
}