BB

using namespace std;
#define int long long
const int mx = 1e6+7;
//const int N = 1e6+7;
#define ll long long
int as[mx] = {0}, bs[mx], cs[mx] = {0};
//stack<char>st;
typedef pair<ll, ll> pii;
const int M = 1e9+7;
const int mod = 998244353;
//const int mod = 1e9+7;
//std::;
map<char, int>mp;
set<string>st;
int dir[4][2] = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
typedef long long LL;
//set<pair<int, int> >st, cnt;
//set<array<int,5> >ay;		ay.insert({1,2,3,4,5});
//struct node{	int x,y,t,ok;
//	bool operator<(const node& y) const{
//		return y.t < t;//以t从小到大排序
//	}	};		priority_queue<node>q;
int ksm(int base, int index) {
	int result = 1;
	while (index) {
		if (index & 1) {
			result = result * base % mod;
		}
		base = base * base % mod;
		index >>= 1;
	}
	return result;
}
typedef long long Z;
struct Comb {
	int n;
	vector<Z> fac, inv_fac;
	Comb(int size = 1 << 20) : n(size), fac(size + 1), inv_fac(size + 1) {
		fac[0] = 1;
		for (int i = 1; i <= size; ++i) {
			fac[i] = fac[i - 1] * i % mod;
		}
		inv_fac[size] = ksm(fac[size], mod - 2, mod);
		for (int i = size - 1; i >= 0; --i) {
			inv_fac[i] = inv_fac[i + 1] * (i + 1) % mod;
		}
	}

	Z ksm(Z base, Z exp, Z mod) {
		Z res = 1;
		while (exp) {
			if (exp & 1) res = res * base % mod;
			base = base * base % mod;
			exp >>= 1;
		}
		return res;
	}
	Z C(int a, int b) {
		if (a < 0 || b < 0 || a < b) return 0;
		return fac[a] * inv_fac[b] % mod * inv_fac[a - b] % mod; //
	}
	Z P(int a, int b) {
		if (a < 0 || b < 0 || a < b) return 0;
		return fac[a] * inv_fac[a - b] % mod;
	}
};
Comb comb;
//--------------------------------------------------------------//


void solve() {
	int n, m, X;
	cin >> n >> m >> X;
	int mxn = LLONG_MIN;
	int mi = LLONG_MAX;
	for (int i = 1; i <= n; i++)cin >> as[i];
	for (int i = 1; i <= m; i++)cin >> bs[i], mi = min(mi, bs[i]), mxn = max(mxn, bs[i]);

	for (int i = 1; i <= n; i++) {
		if (X > as[i]) {
			if (mi >= X)continue;
			else if (mi >= as[i])X = mi;
			else if (mi < as[i])X = as[i];
		} 
		else if (X == as[i])continue;
		else {
			if (mxn >= as[i])X = as[i];
			else if (mxn >= X)X = mxn;
			else if (mxn < X)continue;
		}
	}
	cout << X << endl;
}

signed main() {
	int T = 1;
//	cin >> T;
	while (T--) {
		//	cout<<"?"<<endl;
		solve();
	}
	return 0;
}