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
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define imie(x...) cerr << "[" #x "]: ", [](auto... $) {((cerr << $ << "; "), ...); }(x), cerr << '\n'
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
const int mod=1e9+7;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    
    ll n, m, s;
    cin >> n >> m >> s;
    vector<pair<ll, ll>> v(m);
    for(auto &[l, r] : v) {
        cin >> l >> r;
    }
    sort(v.begin(), v.end());
    vector<pair<ll, ll>> razem;
    for(auto &[l, r] : v) {
        if(razem.empty() || l > razem.back().second + 1) {
            razem.push_back({l, r});
        } else {
            razem.back().second = max(razem.back().second, r);
        }
    }
    pair<ll, ll> b;
    for(auto &[l, r] : razem) {
        if(l <= s && s <= r) {
            b = {l, r};
            break;
        }
    }
    ll ans = -1, maxi = LLONG_MAX;
    if(b.first > 1) {
        ll kand = b.first - 1;
        ll d = abs(s - kand);
        if(d < maxi) {
            maxi = d;
            ans = kand;
        }
    }
    if(b.second < n) {
        ll kand = b.second + 1;
        ll d = abs(s - kand);
        if(d < maxi || (d == maxi && kand < ans)) {
            maxi = d;
            ans = kand;
        }
    }
    cout << ans;
    return 0;
}