#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, q, m, cur;
bool a[N];
int seg[N << 2][2], lazy[N << 2][2];
void build(int id, int l, int r){
lazy[id][0] = lazy[id][1] = -1;
if (l == r){
seg[id][l & 1] = a[l];
return;
}
int mid = l + ((r - l) >> 1);
build(id << 1, l, mid); build((id << 1) | 1, mid + 1, r);
seg[id][0] = seg[id << 1][0] + seg[(id << 1) | 1][0];
seg[id][1] = seg[id << 1][1] + seg[(id << 1) | 1][1];
}
int cnt(int l, int r, int k){
return (r >> 1) - ((l - 1) >> 1) + (k & 1 ? ((r - l + 1) & 1 ? (l & 1 ? 1 : -1) : 0) : 0);
}
void down(int id, int l, int r, int mid, int k){
int &v = lazy[id][k];
seg[id << 1][k] = !v ? 0 : cnt(l, mid, k);
seg[(id << 1) | 1][k] = !v ? 0 : cnt(mid + 1, r, k);
lazy[id << 1][k] = lazy[(id << 1) | 1][k] = v;
v = -1;
}
int get(int id, int l, int r, int u, int v){
if (r < u || v < l) return 0;
if (u <= l && r <= v) {
// if (u == 2 && v == 7) cout << id << "\t" << l << " " << r << "\t" << seg[id][0] << " " << seg[id][1] << "\n";
return seg[id][0] + seg[id][1];
}
int mid = l + ((r - l) >> 1);
if (lazy[id][0] != -1) down(id, l, r, mid, 0);
if (lazy[id][1] != -1) down(id, l, r, mid, 1);
return get(id << 1, l, mid, u, v) + get((id << 1) | 1, mid + 1, r, u, v);
}
void update(int id, int l, int r, int u, int v, int k, int val){
if (r < u || v < l) return;
if (u <= l && r <= v){
if (val)
seg[id][k] = cnt(l, r, k);
else
seg[id][k] = 0;
lazy[id][k] = val;
return;
}
int mid = l + ((r - l) >> 1);
if (lazy[id][k] != -1) down(id, l, r, mid, k);
update(id << 1, l, mid, u, v, k, val);
update((id << 1) | 1, mid + 1, r, u, v, k, val);
seg[id][k] = seg[id << 1][k] + seg[(id << 1) | 1][k];
// cout << l << " " << r << "\t\t" << seg[id][0] << " " << seg[id][1] << "\n";
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
if (fopen("Tjelesni.inp", "r")){
freopen("Tjelesni.inp", "r", stdin);
freopen("Tjelesni.out", "w", stdout);
}
cin >> n >> q >> m;
for (int i = 1, x; i <= n; ++i){
cin >> x;
if (x == m) cur = i;
a[i] = x < m;
}
build(1, 1, n);
// cout << "\t"; for (int i = 1; i <= n; ++i) cout << get(1, 1, n, i, i) << " "; cout << "\n";
while (q--){
int l, r; cin >> l >> r;
int c = l & 1;
int num = get(1, 1, n, l, r), v = cnt(l, r, c);
if (num > v){
update(1, 1, n, l, r, c, 1);
update(1, 1, n, l, r, c ^ 1, 0);
update(1, 1, n, max(1, r - ((num - v) << 1) + 1), r, c ^ 1, 1);
if (l <= cur && cur <= r)
cur = r - ((num - v) << 1) - ((l & 1) == (r & 1) ? 1 : 0);
} else {
update(1, 1, n, l, r, c, 0);
update(1, 1, n, l, r, c ^ 1, 0);
// if (l == 5 && r == 7){
// for (int i = 1; i <= n; ++i) cout << get(1, 1, n, i, i) << " "; cout << "\t" << get(1, 1, n, 5, 7) << "\n";
// }
update(1, 1, n, l, min(l + (num << 1) - 1, n), c, 1);
// if (l == 5 && r == 7){
// for (int i = 1; i <= n; ++i) cout << get(1, 1, n, i, i) << " "; cout << "\t" << get(1, 1, n, 5, 7) << "\n";
// }
if (l <= cur && cur <= r)
cur = (num == v ? r - ((l & 1) == (r & 1)) : l + (num << 1));
}
// cout << num << " " << v << "\t";
// for (int i = 1; i <= n; ++i) cout << get(1, 1, n, i, i) << " "; cout << "\t" << cur;
// if (l == 2 && r == 7) cout << "\t\t" << get(1, 1, n, 2, 7);
// cout << "\n";
}
cout << cur;
}
/*
7 3 3
4 2 3 7 1 6 5
4 7
3 5
1 4
*/
/*
5 5 3
4 5 1 3 2
2 5 -> 4 1 5 2 3
3 5 -> 4 1 2 5 3
1 4 -> 1 5 2 4 3
3 5 -> 1 5 2 4 3
2 4 -> 1 2 5 4 3
*/