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
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <climits>
#include <algorithm>

using namespace std;

typedef long long LL;

constexpr int maxPrze = 1007;

LL BUDYNKI_CNT;
int n;
LL SZKOLA_BAJTKA;

LL ANS = LLONG_MAX-100;
LL REP = -1;

inline void CAND(LL x) {
    LL cand = max(SZKOLA_BAJTKA-x, x-SZKOLA_BAJTKA);
    if (cand < ANS) {
        ANS = cand;
        REP = x;
    }
}

pair<LL, LL> prze[maxPrze];

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cin >> BUDYNKI_CNT >> n >> SZKOLA_BAJTKA;

    for (int i = 1; i <= n; i++) {
        cin >> prze[i].first >> prze[i].second;
    }
    prze[0] = {0, 0};
    prze[n+1] = {BUDYNKI_CNT+1, BUDYNKI_CNT+1};


    n += 2;

    sort(prze, prze+n);

    for (int i = 1; i+1 <= n; i++) {
        auto [l, r] = prze[i];
        // cin >> l >> r;

        if (l-1 >= 1 && l-prze[i-1].second > 1) {
            CAND(l-1);
        }
        if (r+1 <= BUDYNKI_CNT && prze[i+1].first-r > 1) {
            CAND(r+1);
        }

        if (prze[i-1].second < SZKOLA_BAJTKA-1 && SZKOLA_BAJTKA-1 < l && l-prze[i-1].second >= 3) {
            CAND(SZKOLA_BAJTKA-1);
        }
        if (r < SZKOLA_BAJTKA-1 && SZKOLA_BAJTKA-1 < prze[i+1].first && prze[i+1].first-r >= 3) {
            CAND(SZKOLA_BAJTKA-1);
        }


        if (prze[i-1].second < SZKOLA_BAJTKA+1 && SZKOLA_BAJTKA+1 < l && l-prze[i-1].second >= 3) {
            CAND(SZKOLA_BAJTKA+1);
        }
        if (r < SZKOLA_BAJTKA+1 && SZKOLA_BAJTKA+1 < prze[i+1].first && prze[i+1].first-r >= 3) {
            CAND(SZKOLA_BAJTKA+1);
        }
    }

    cout << REP << '\n';

    return 0;
}