![]()
![]()
#include<bits/stdc++.h>
#define forn(i, n) for (int i = 0; i < int(n); i++)
#define fore(i, s, t) for (int i = s; i < (int)t; i++)
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define pf2(x,y) printf("%d %d\n",x,y)
#define pf(x) printf("%d\n",x)
#define each(x) for(auto it:x) cout<<it<<endl;
#define pi pair<int,int>
using namespace std;
char inline nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
template <typename T>
bool rd(T& v){
static char ch;
while(ch!=EOF&&!isdigit(ch)) ch=nc();
if(ch==EOF) return false;
for(v=0;isdigit(ch);ch=nc())
v=v*10+ch-'0';
return true;
}
template <typename T>
void o(T p){
static int stk[70],tp;
if(p==0) {
putchar('0');return ;
}
if(p<0) {
p=-p;putchar('-');
}
while(p) stk[++tp]=p%10,p/=10;
while(tp) putchar(stk[tp--]+'0');
}
typedef long long ll;
const int maxn=2e5+5;
const int maxm=4e5+5;
const int inf=1e9;
typedef vector<int> vc;
int n,m;
ll k;
bool xz(ll x,vc a,vc b){
ll ans = 0;
for (int i = 0; i < n; i++) {
if (a[i] == 0)
ans += x < 0 ? m : 0;
else if (a[i] < 0) {
ll p = ceil(x * 1.0 / a[i]);
ans += lower_bound(all(b),p) - b.begin();
}
else if (a[i] > 0) {
ll p = floor(x * 1.0 / a[i]);
ans += m - (upper_bound(all(b),p) - b.begin());
}
}
return ans <= k;
}
int main(){
cin>>n>>m>>k;
k--;
vector<int> a(n),b(m);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<m;i++)
scanf("%d",&b[i]);
sort(all(a));
sort(all(b));
ll l=-1e12,r=1e12;
ll ans=l;
while(l<r){
ll mid=l+r>>1;
if(xz(mid,a,b)) r=mid;
else l=mid+1;
}
cout<<l<<endl;
}