#include <bits/stdc++.h>
using namespace std;
void err(istream_iterator<string> it) { cout << "\n"; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cout << "(" << *it << " = " << a << ") ";
  err(++it, args...);
}
long long maxV = (long long)(1e18) + 1;
long long n, k;
priority_queue<long long> q;
map<long long, bool> vis;
vector<long long> p1, p2;
void getSet(vector<unsigned long long> &s, vector<long long> &p) {
  long long cur = 1;
  assert(q.empty());
  vis.clear();
  q.push(-1);
  s.emplace_back(1);
  vis[1] = true;
  while (!q.empty()) {
    cur = -q.top();
    q.pop();
    for (int i = 0; i < p.size(); ++i) {
      if (cur >= maxV || maxV * 1.0 / cur < 1.0 * p[i]) continue;
      if (!vis.count(cur * p[i])) {
        vis[cur * p[i]] = true;
        q.push(-cur * p[i]);
        s.emplace_back(cur * p[i]);
      }
    }
  }
  sort(s.begin(), s.end());
}
vector<unsigned long long> s1, s2;
long long cnt(unsigned long long m, unsigned long long &val) {
  int y = s2.size() - 1;
  long long ret = 0;
  val = 0;
  for (int x = 0; x < s1.size(); ++x) {
    while (y >= 0 && s1[x] * s2[y] > m) y--;
    ret += y + 1;
    if (y >= 0) val = max(val, s1[x] * s2[y]);
  }
  return ret;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; ++i) {
    long long a;
    cin >> a;
    if (i % 2)
      p2.emplace_back(a);
    else
      p1.emplace_back(a);
  }
  cin >> k;
  s1.emplace_back(maxV);
  getSet(s1, p1);
  getSet(s2, p2);
  unsigned long long st = 1, en = maxV, val;
  while (st < en) {
    unsigned long long m = (st + en) / 2;
    if (cnt(m, val) < k + 1)
      st = m + 1;
    else
      en = m;
  }
  cnt(st - 1, val);
  cout << val << "\n";
  return 0;
}
