#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
struct Node {
int val, cnt;
int lc, rc, fa;
}tree[maxn];
int tot = 0;
int create(int x, int fa) {
tree[++tot] = {x, 1, 0, 0, fa};
return tot;
}
void insert(int &u, int x) {
if (!u) {
u = create(x, u);
return;
}
if (x == tree[u].val) {
tree[u].cnt++;
return;
} else if (x < tree[u].val) insert(tree[u].lc, x);
else insert(tree[u].rc, x);
}
int getpre(int u) {
if (tree[u].lc) {
u = tree[u].lc;
while (tree[u].rc) u = tree[u].rc;
return tree[u].val;
} else {
while (tree[u].fa && tree[tree[u].fa].lc == u) u = tree[u].fa;
return tree[tree[u].fa].val;
}
}
int getnxt(int u) {
if (tree[u].rc) {
u = tree[u].rc;
while (tree[u].lc) u = tree[u].lc;
return tree[u].val;
} else {
while (tree[u].fa && tree[tree[u].fa].rc == u) u = tree[u].fa;
return tree[tree[u].fa].val;
}
}
int n, rt, x;
void dfs(int u, int x) {
if (tree[u].val == x) {
cout << getpre(u) << '\n' << getnxt(u) << '\n';
exit(0);
} else if (tree[u].val < x) dfs(tree[u].rc, x);
else dfs(tree[u].lc, x);
}
signed main() {
cin >> n;
for (int i = 1; i <= n; ++i) {
scanf("%d", &x);
insert(rt, x);
}
cin >> x;
dfs(rt, x);
}