#include <bits/stdc++.h>
using namespace std;
vector<int> a, b;
vector<long long> A, B;
queue<long long> P[100];
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,
               greater<pair<long long, long long> > >
    Q;
long long inf = 1E18;
void TakeInputs() {
  vector<int> v;
  int n;
  cin >> n;
  while (n--) {
    int x;
    cin >> x;
    v.push_back(x);
  }
  sort(v.begin(), v.end());
  for (int i = 0; i < v.size(); ++i)
    if (i % 2 == 0)
      a.push_back(v[i]);
    else
      b.push_back(v[i]);
}
void FillNumbers(vector<int>& a, vector<long long>& A) {
  P[1].push(1);
  Q.push(make_pair(1, 1));
  while (!Q.empty()) {
    long long i, ans;
    tie(ans, i) = Q.top();
    Q.pop();
    P[i].pop();
    A.push_back(ans);
    if (!P[i].empty()) {
      Q.push(make_pair(P[i].front(), i));
    }
    for (auto x : a) {
      if (x < i) continue;
      if (ans <= inf / x) {
        P[x].push(x * ans);
        if (P[x].size() == 1) Q.push(make_pair(x * ans, x));
      }
    }
  }
}
void PreProcess() {
  FillNumbers(a, A);
  FillNumbers(b, B);
}
long long GetCount(long long x) {
  long long ans = 0;
  for (int n = A.size(), m = B.size(), i = 0, j = m - 1;
       i < n && A[i] <= x && j >= 0; ++i) {
    for (; j > -1 && x / B[j] < A[i]; --j)
      ;
    ans += (j + 1);
  }
  return ans;
}
long long BinarySearch(long long k) {
  long long x = 1, y = inf, z = 1;
  while (x <= y) {
    long long mid = x + (y - x) / 2;
    if (GetCount(mid) >= k)
      z = mid, y = mid - 1;
    else
      x = mid + 1;
  }
  return z;
}
int main() {
  long long k;
  TakeInputs();
  PreProcess();
  cin >> k;
  cout << BinarySearch(k) << '\n';
  return 0;
}
