#include <bits/stdc++.h>
using namespace std;
vector<long long> factors;
int IT_MAX = 1 << 17;
int MOD = 998244353;
const int INF = 0x3f3f3f3f;
const long long LL_INF = 0x3f3f3f3f3f3f3f3f;
const double PI = acos(-1);
const double ERR = 1e-10;
long long mod(long long a, long long m) {
  return (a + (abs(a) / m) * m + m) % m;
}
vector<vector<long long>> b;
vector<long long> f;
vector<vector<long long>> mul(vector<vector<long long>>& a,
                              vector<vector<long long>>& b) {
  vector<vector<long long>> res(a.size(), vector<long long>(a.size(), 0));
  for (int i = 0; i < a.size(); ++i) {
    for (int j = 0; j < a.size(); ++j) {
      for (int k = 0; k < a.size(); ++k) {
        res[i][j] += a[i][k] * b[k][j];
        res[i][j] %= (MOD - 1);
      }
    }
  }
  return res;
}
vector<vector<long long>> binpow(vector<vector<long long>>& a, int n) {
  vector<vector<long long>> res(a.size(), vector<long long>(a.size(), 0));
  for (int i = 0; i < a.size(); ++i) {
    res[i][i] = 1;
  }
  while (n) {
    if (n & 1) res = mul(res, a);
    a = mul(a, a);
    n >>= 1;
  }
  return res;
}
long long bp(long long a, int n) {
  long long res = 1;
  while (n) {
    if (n & 1) {
      res *= a;
      res %= MOD;
    }
    a *= a;
    a %= MOD;
    n >>= 1;
  }
  return res;
}
long long solve(long long a, long long b, long long m) {
  long long n = (long long)sqrt(m + .0) + 1;
  long long an = 1;
  for (long long i = 0; i < n; ++i) an = (an * a) % m;
  map<long long, long long> vals;
  for (long long i = 1, cur = an; i <= n; ++i) {
    if (!vals.count(cur)) vals[cur] = i;
    cur = (cur * an) % m;
  }
  for (long long i = 0, cur = b; i <= n; ++i) {
    if (vals.count(cur)) {
      long long ans = vals[cur] * n - i;
      if (ans < m) return ans;
    }
    cur = (cur * a) % m;
  }
  return -1;
}
int generator(long long MOD) {
  vector<long long> fact;
  long long phi = MOD - 1, n = phi;
  for (long long i = 2; i * i <= n; ++i)
    if (n % i == 0) {
      fact.push_back(i);
      while (n % i == 0) n /= i;
    }
  if (n > 1) fact.push_back(n);
  for (long long res = 2; res <= MOD; ++res) {
    bool ok = true;
    for (size_t i = 0; i < fact.size() && ok; ++i)
      ok &= bp(res, phi / fact[i]) != 1;
    if (ok) return res;
  }
  return -1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cout.tie(0);
  cin.tie(0);
  long long k;
  cin >> k;
  b.assign(k, vector<long long>(k, 0));
  for (int i = 0; i < k; ++i) {
    cin >> b[0][i];
  }
  for (int i = 0; i < k - 1; ++i) {
    b[i + 1][i] = 1;
  }
  long long n, m;
  cin >> n >> m;
  b = binpow(b, n - k);
  long long deg = b[0][0];
  long long per = generator(MOD);
  long long osn = bp(3, deg);
  if (osn == 0 || osn % MOD == 0) {
    cout << -1;
    return 0;
  }
  long long ndeg = solve(osn, m, MOD);
  if (ndeg == -1) {
    cout << -1;
    return 0;
  }
  cout << bp(3, ndeg);
  return 0;
}
