#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
void yes() {
  cout << "Yes"
       << "\n";
}
void no() {
  cout << "No"
       << "\n";
}
struct Sync_stdio {
  Sync_stdio() {
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
  }
} _sync_stdio;
struct FAIL {
  FAIL() {
    cout << "CHANGE!!!"
         << "\n";
  }
};
void go(const vector<long long> &data, vector<long long> &res,
        long long current_prod = 1, int current_pos = 0) {
  if (current_pos == data.size()) {
    res.push_back(current_prod);
    return;
  }
  go(data, res, current_prod, current_pos + 1);
  long long elem = data[current_pos];
  if ((long long)1.003e18 / elem >= current_prod) {
    go(data, res, current_prod * elem, current_pos);
  }
}
int main() {
  int n;
  cin >> n;
  vector<long long> v(n);
  for (int __i = 0; __i < (n); ++__i) cin >> v[__i];
  ;
  vector<long long> odd;
  vector<long long> even;
  long long k;
  cin >> k;
  --k;
  for (int i = (0); i < (n); ++i) {
    if (i % 2) {
      odd.push_back(v[i]);
    } else {
      even.push_back(v[i]);
    }
  }
  vector<long long> odd_values;
  vector<long long> even_values;
  go(odd, odd_values);
  go(even, even_values);
  long long l = 0;
  long long r = 1.003e18;
  sort(odd_values.begin(), odd_values.end());
  sort(even_values.begin(), even_values.end());
  while (l < r) {
    long long mid = (l + r) / 2;
    long long lower_eq = 0;
    for (auto first_elem : odd_values) {
      lower_eq += upper_bound(even_values.begin(), even_values.end(),
                              mid / first_elem) -
                  even_values.begin();
    }
    if (lower_eq > k) {
      r = mid;
    } else {
      l = mid + 1;
    }
  }
  cout << l;
}
