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 <iostream>
#include <string>
#include <vector>
#include <algorithm>


long long znajdzNajblizsza(long long poczatek, long long koniec, long long szukana) {
    if (szukana <= poczatek) {
        return poczatek;
    }
    if (szukana >= koniec) {
        return koniec;
    }
    return szukana;
}

long long znajdzNajlepszyWynik(long long n, int m, long long s, std::vector<std::pair<long long, long long>> pary) {
    long long result = -1;
    pary.push_back({n+1, n+1});

    std::vector<std::pair<long long, long long>> posortowane_pary = pary;
    std::sort(posortowane_pary.begin(), posortowane_pary.end());

    long long begin = 1;
    long long current = -1;

    for (int i = 0; i < m + 1; i++) {
        if (begin < posortowane_pary[i].first) {
            current = znajdzNajblizsza(begin, posortowane_pary[i].first - 1LL, s);

            if (std::abs(current - s) < std::abs(result - s) || result == -1) {
                result = current;
            }
        }
        begin = std::max(begin, posortowane_pary[i].second + 1LL);
    }

    return result;
}

int main() {
    long long n, s;
    int m;
    std::cin >> n >> m >> s;
    
    std::vector<std::pair<long long, long long>> pary;
    for (int i = 0; i < m; i++) {
        long long a, b;
        std::cin >> a >> b;
        pary.push_back({a, b});
    }

    long long wynik = znajdzNajlepszyWynik(n, m, s, pary);
    std::cout << wynik << std::endl;

    return 0;
}