#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f2f1f0f;
const long long LINF = 1ll * INF * INF;
const double PI = atan(1) * 4;
const long long MAX = 1e18;
long long N, K;
vector<int> P;
struct DC {
  vector<int> p;
  vector<long long> A, B;
  void gen(long long offset, int i, vector<int> &p, vector<long long> &A) {
    if (i == (int)p.size()) {
      A.push_back(offset);
      return;
    }
    while (1) {
      gen(offset, i + 1, p, A);
      if (offset > MAX / p[i]) break;
      offset *= p[i];
    }
  }
  DC(vector<int> &p) : p(p) {
    int n = ((int)(p).size());
    vector<int> pa, pb;
    for (int i = 0; i < n; i += 2) pa.push_back(p[i]);
    for (int i = 1; i < n; i += 2) pb.push_back(p[i]);
    gen(1, 0, pa, A);
    gen(1, 0, pb, B);
    sort((A).begin(), (A).end(), greater<long long>());
    sort((B).begin(), (B).end());
  }
  long long cnt(long long x) {
    int j = 0;
    long long ans = 0;
    for (int i = 0; i < (int)A.size(); i++) {
      while (j < ((int)(B).size()) && B[j] <= x / A[i]) j++;
      ans += j;
    }
    return ans;
  }
};
int main() {
  cin >> N;
  P.resize(N);
  for (int i = 0; i < N; i++) cin >> P[i];
  cin >> K;
  DC d = DC(P);
  long long l = 0, r = MAX, m;
  while (l < r - 1) {
    m = (l + r) >> 1;
    if (d.cnt(m) < K)
      l = m;
    else
      r = m;
  }
  cout << r << endl;
}
