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
#include <cstdint>
#include <iostream>
#include <algorithm> // for std::sort
#include <set>
#include <math.h>
#include <stdint.h>

using namespace std;
// #define int long long

const int M = 1e3 + 5;
long long dolne[M];
long long gorne[M];


int main() {
    long long n, s;
    int m;
    cin >> n >> m >> s;
    for (int i = 1; i <= m; i++) {
        cin >> dolne[i] >>  gorne[i];
    }
    sort(dolne, dolne + m + 1);
    sort(gorne, gorne + m + 1);
    long long curr = 1;
    int current_left_id = 1;
    int current_right_id = 1;
    long long curr_min = 1e12;
    long long ret;
    while (curr <= n) {
        if (dolne[current_left_id] <= curr and gorne[current_right_id] >= curr) {
            curr = gorne[current_right_id] + 1;
            current_right_id++;
            current_left_id++;
            continue;
        }
        if (abs(curr - s) < curr_min) {
            ret = curr;
            curr_min = abs(curr - s);
        }
        if (dolne[current_left_id] == 0) {
            break;
        }
        curr = max(curr + 1, dolne[current_left_id] - 1);
    }
    cout << ret << endl;
    return 0;
}