#include <bits/stdc++.h>
using namespace std;
const long long int maxn = 1e18;
int prime[20];
long long int k;
vector<int> a, b;
vector<long long> A, B;
void dfs1(long long int val, int ind) {
  if (ind == (int)a.size()) {
    A.push_back(val);
    return;
  }
  dfs1(val, ind + 1);
  if ((maxn / val) >= 1ll * a[ind]) dfs1(val * a[ind], ind);
}
void dfs2(long long int val, int ind) {
  if (ind == (int)b.size()) {
    B.push_back(val);
    return;
  }
  dfs2(val, ind + 1);
  if ((maxn / val) >= 1ll * b[ind]) dfs2(val * b[ind], ind);
}
long long int find_Upper1(long long int l, long long int r, long long int val) {
  if (l <= r) {
    long long int m = l + (r - l) / 2;
    if (B[m] <= val and (m == r or B[m + 1] > val)) return (m + 1);
    if (B[m] <= val) return find_Upper1(m + 1, r, val);
    return find_Upper1(l, m - 1, val);
  }
}
long long int find_Upper2(long long int l, long long int r, long long int val) {
  if (l <= r) {
    long long int m = l + (r - l) / 2;
    if (A[m] <= val and (m == r or A[m + 1] > val)) return (m + 1);
    if (A[m] <= val) return find_Upper2(m + 1, r, val);
    return find_Upper2(l, m - 1, val);
  }
}
long long int cal(long long int val) {
  long long int sum = 0;
  if ((int)B.size() > (int)A.size()) {
    for (int i = 0; i <= (int)A.size() - 1; i++) {
      if (A[i] > val) break;
      sum += find_Upper1(0, (int)B.size() - 1, val / A[i]);
    }
  } else {
    for (int i = 0; i <= (int)B.size() - 1; i++) {
      if (B[i] > val) break;
      sum += find_Upper2(0, (int)A.size() - 1, val / B[i]);
    }
  }
  return sum;
}
long long int srch(long long int start, long long int end) {
  if (end >= start) {
    long long int mid = start + (end - start) / 2;
    long long int x = cal(mid);
    if (x == k and (mid == start or cal(mid - 1) < k)) return mid;
    if (x < k) return srch(mid + 1, end);
    return srch(start, mid - 1);
  }
  return 0;
}
void solve() {
  int n, p, z, y, x;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &prime[i]);
  scanf("%lld", &k);
  for (int i = 1; i <= n; i++) {
    if (i & 1)
      a.push_back(prime[i]);
    else
      b.push_back(prime[i]);
  }
  dfs1(1, 0);
  dfs2(1, 0);
  sort((A).begin(), (A).end());
  sort((B).begin(), (B).end());
  long long int low = 1, high = 1e18;
  printf("%lld\n", srch(low, high));
}
int main() {
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
