#include <bits/stdc++.h>
using namespace std;
vector<vector<long long int> > g(2);
int n, size1, size2;
long long int a[20], b[20], k;
const long long int INF = 1e18;
void dfs(int k, int x, int y, long long int mul) {
  g[k].push_back(mul);
  for (int i = x; i <= y; i++) {
    if (mul <= INF / b[i]) dfs(k, i, y, mul * b[i]);
  }
}
int check(long long int mid) {
  long long int sum = 0;
  for (int i = 0; i < size1 && g[0][i] <= mid; i++) {
    long long int temp = mid / g[0][i];
    int p = upper_bound(g[1].begin(), g[1].end(), temp) - g[1].begin() - 1;
    sum = sum + p + 1;
  }
  return sum >= k;
}
int main() {
  int i, count;
  cin >> n;
  for (i = 0; i < n; i++) {
    cin >> a[i];
  }
  cin >> k;
  count = 0;
  for (i = 0; i < n; i++) {
    if (i % 2 == 0) {
      b[count] = a[i];
      count = count + 1;
    }
  }
  dfs(0, 0, count - 1, 1);
  count = 0;
  for (i = 0; i < n; i++) {
    if (i % 2 == 1) {
      b[count] = a[i];
      count = count + 1;
    }
  }
  dfs(1, 0, count - 1, 1);
  for (int i = 0; i < 2; i++) sort(g[i].begin(), g[i].end());
  size1 = g[0].size();
  size2 = g[1].size();
  long long int l = 0, r = INF, ans;
  while (l <= r) {
    long long int mid = (l + r) / 2;
    if (check(mid)) {
      ans = mid;
      r = mid - 1;
    } else
      l = mid + 1;
  }
  cout << ans << endl;
  g[0].clear();
  g[1].clear();
}
