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
/*
 * Author: toko
 * Time: 2025-03-11 18:33:18
 */

#ifndef DEBUG
#define NDEBUG
#pragma GCC optimize("Ofast,unroll-loops")
#endif

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

int main()
{
	iostream::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);


	uint64_t n, m, s;
	cin >> n >> m >> s;
	vector<pair<uint64_t, uint64_t>> z(m);
	for (auto& [l, r] : z)
		cin >> l >> r;

	sort(z.begin(), z.end());
	uint32_t idx = 0;
	for (uint32_t i = 1; i < m; i++)
	{
		if (z[i].first == z[idx].second + 1)
			z[idx].second = z[i].second;
		else
		{
			idx++;
			z[idx] = z[i];
		}
	}
	z.resize(idx + 1);

	for (auto& [l, r] : z)
	{
		if (l <= s && s <= r)
		{
			if ((s - l <= r - s && l - 1 != 0) || r + 1 > n)
				cout << l - 1 << endl;
			else
				cout << r + 1 << endl;
			return 0;
		}
	}


	return 0;
}