#include <bits/stdc++.h>
#define pb push_back
#define LL long long
using namespace std;
struct node{int p;bool f;}a[20];
int n,siz;
vector < LL > v1,v2;
void D1(int pos,int ed,LL k)
{
v1.insert(lower_bound(begin(v1),end(v1),k),k);
while(v1.size() > siz) v1.pop_back();
for (int i = pos;i <= ed && a[i].p <= 1e18/k;i++)
D1(i,ed,k*a[i].p);
}
void D2(int pos,int ed,LL k)
{
v2.insert(lower_bound(begin(v2),end(v2),k),k);
while(v2.size() > siz) v2.pop_back();
for (int i = pos;i <= ed && a[i].p <= 1e18/k;i++)
D2(i,ed,k*a[i].p);
}
bool cmp(node a,node b)
{return a.f == b.f ? a.p < b.p : a.f < b.f;}
bool check(LL k)
{
LL res = 0;int j = v2.size()-1;
for (LL i : v1)
{
if(i > k) break;
while(j >= 0 && v2[j] > k/i) j--;
res += (j+1);
}
return res >= siz;
}
int main()
{
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i].p;
sort(a+1,a+n+1,cmp);
for (int i = 1;i <= n;i++) a[i].f = i&1;
sort(a+1,a+n+1,cmp);
cin >> siz;
int mid = (1+n)>>1;
D1(1,mid,1);D2(mid+1,n,1);
LL l = 1,r = 1e18;
while(l < r)
{
LL mid = (l+r)>>1;
if(check(mid)) r = mid;
else l = mid+1;
}
cout << l;
return 0;
}