#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x;
  char c;
  int f = 1;
  while ((c = getchar()) != '-' && (c > '9' || c < '0'))
    ;
  if (c == '-') c = getchar(), f = -1;
  x = c ^ '0';
  while ((c = getchar()) >= '0' && c <= '9')
    x = (x << 1) + (x << 3) + (c ^ '0');
  return x * f;
}
const long long inf = 1e18;
const int maxn = 1e7 + 10;
long long q[maxn];
int tmp, prim[30];
int n, m, lim;
void dfs(long long x, int lst) {
  q[++tmp] = x;
  if (lst > lim) return;
  if (x > inf / prim[lst]) return;
  dfs(x * prim[lst], lst);
  for (register int i = lst + 1, iend = lim; i <= iend; ++i) {
    if (x > inf / prim[i]) return;
    dfs(x * prim[i], i);
  }
}
long long q1[maxn];
long long f(long long x) {
  long long num = 0;
  for (int i = 1, j = m; i <= tmp && j > 0; ++i) {
    long long u = x / q[i];
    while (j > 0 && q1[j] > u) --j;
    num += j;
  }
  return num;
}
int main() {
  long long k;
  n = read();
  for (register int i = 1, iend = n; i <= iend; ++i) prim[i] = read();
  scanf("%lld", &k);
  lim = n / 2;
  dfs(1, 1);
  swap(q, q1);
  m = tmp;
  tmp = 0;
  lim = n;
  dfs(1, n / 2 + 1);
  sort(q + 1, q + tmp + 1);
  sort(q1 + 1, q1 + m + 1);
  long long L = 1, R = inf;
  while (L <= R) {
    long long Mid = (L + R) >> 1ll;
    if (f(Mid) < k)
      L = Mid + 1;
    else
      R = Mid - 1;
  }
  printf("%lld\n", R + 1);
  return 0;
}
