#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 30;
const long long INF = 1ll << 60;
const double Inf = 1e20;
const double eps = 1e-9;
void gmax(int &a, int b) { a = (a > b ? a : b); }
void gmin(int &a, int b) { a = (a < b ? a : b); }
int n;
vector<int> a[2];
vector<long long> wa, wb;
long long k;
void disolve(vector<int> a, vector<long long> &b, long long cur = 1, int k = 0,
             long long maxi = 1e18) {
  if (k >= ((int)(a).size())) {
    b.push_back(cur);
    return;
  }
  while (maxi) {
    disolve(a, b, cur, k + 1, maxi);
    maxi /= a[k];
    cur *= a[k];
  }
}
long long getV(long long x) {
  int p = 0;
  long long ret = 0;
  for (int i = 0; i <= ((int)(wa).size()) - 1; ++i) {
    while (p < ((int)(wb).size()) && wb[p] <= x / wa[i]) ++p;
    ret += p;
  }
  return ret;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    int x;
    scanf("%d", &x);
    a[i & 1].push_back(x);
  }
  scanf("%lld", &k);
  disolve(a[0], wa);
  disolve(a[1], wb);
  sort(wa.begin(), wa.end());
  reverse(wa.begin(), wa.end());
  sort(wb.begin(), wb.end());
  long long lo = 1, hi = 1e18, mid, ans;
  while (lo <= hi) {
    mid = lo + hi >> 1;
    if (getV(mid) >= k)
      ans = mid, hi = mid - 1;
    else
      lo = mid + 1;
  }
  printf("%lld\n", ans);
  return 0;
}
