#include <bits/stdc++.h>
using namespace std;
const long long MOD = 998244353LL;
const long long dx[4] = {-1, -1, 1, 1};
const long long dy[4] = {-1, 1, -1, 1};
const long long MAX = 2e5 + 50;
long long gcd(long long a, long long b) { return (b == 0 ? a : gcd(b, a % b)); }
long long n, x, y, k, Q, ans, d;
string second;
long long res[102][102], ret[102][102], m[102][102], tmp[102][102];
void matrixMultiplyret() {
  for (int i(0); i < n; i++) {
    for (int j(0); j < n; j++) {
      tmp[i][j] = 0;
      for (int k(0); k < n; k++) {
        tmp[i][j] += ((ret[i][k] + (MOD - 1)) % (MOD - 1) *
                      (m[k][j] + (MOD - 1)) % (MOD - 1)) %
                     (MOD - 1);
        tmp[i][j] = (tmp[i][j] + (MOD - 1)) % (MOD - 1);
      }
    }
  }
  for (int i(0); i < n; i++)
    for (int j(0); j < n; j++) ret[i][j] = tmp[i][j];
}
void matrixMultiplymat() {
  for (int i(0); i < n; i++) {
    for (int j(0); j < n; j++) {
      tmp[i][j] = 0;
      for (int k(0); k < n; k++) {
        tmp[i][j] += ((m[i][k] + (MOD - 1)) % (MOD - 1) *
                      (m[k][j] + (MOD - 1)) % (MOD - 1)) %
                     (MOD - 1);
        tmp[i][j] = (tmp[i][j] + (MOD - 1)) % (MOD - 1);
      }
    }
  }
  for (int i(0); i < n; i++)
    for (int j(0); j < n; j++) m[i][j] = tmp[i][j];
}
void matrixPower(long long pow) {
  for (int i(0); i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i == j)
        ret[i][i] = 1;
      else
        ret[i][j] = 0;
    }
  }
  while (pow) {
    if (pow & 1) {
      matrixMultiplyret();
    }
    pow >>= 1;
    matrixMultiplymat();
  }
}
long long pw(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = ret * a % MOD;
    a = a * a % MOD;
    b >>= 1;
  }
  return ret;
}
pair<long long, long long> solve(long long x, long long y) {
  if (y > x) {
    auto u = solve(y, x);
    swap(u.first, u.second);
    return u;
  }
  if (!y) return {1, 0};
  long long r = x / y;
  auto u = solve(y, x % y);
  long long a = u.first, b = u.second;
  return {b, (a - (r * b) % (MOD - 1)) % (MOD - 1)};
}
void process() {
  map<long long, long long> tmp;
  tmp[1] = 0;
  long long prev = 1LL;
  for (long j = 1; j < 32500LL; j++) {
    prev = (prev * 3LL) % MOD;
    tmp[prev] = j;
  }
  long long a = pw(pw(3, MOD - 2), 32500LL);
  long long cp = 1LL;
  for (long j = 0;; j++) {
    long long cur = (cp * x) % MOD;
    cp = (cp * a) % MOD;
    if (tmp.find(cur) != tmp.end()) {
      x = (tmp[cur] + 32500LL * j) % (MOD - 1);
      return;
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n - 1; i++)
    for (int j = 0; j < n; j++) m[i][j] = ((i + 1) == j);
  for (int j = 0; j < n; j++) {
    cin >> m[n - 1][n - 1 - j];
    m[n - 1][n - 1 - j] %= (MOD - 1);
  }
  cin >> k >> x;
  process();
  matrixPower(k - n);
  long long last = ret[n - 1][n - 1];
  if (!last && !x) return cout << 1 << '\n', 0;
  if (!last) return cout << -1 << '\n', 0;
  long long tmp = (MOD - 1);
  long long g = gcd(tmp, last);
  if (x % g != 0) return cout << -1 << '\n', 0;
  last /= g;
  tmp /= g;
  x /= g;
  last %= tmp;
  ans = (solve(tmp, last).second * x) % tmp;
  ans = (ans + tmp) % tmp;
  cout << pw(3, ans) << '\n';
  return 0;
}
