#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

// For Ideone
typedef long long __int64;

const int base = 1000;
const int digit = 3;

class bign
{
private:
    int _arr[110];
    int _m;
    void _simplify (void);
public:
    bign (void);
    bign (int init);
    friend istream& operator >> (istream& fin, bign& a);
    friend bign operator / (bign a, int b);
    friend int operator % (bign a, int b);
    friend bool operator == (bign a, bign b);
};
void bign::_simplify (void)
{
    for (int i = 0; i <= _m; i++)
    {
        if (i == _m && _arr[i] >= base) _m++;
        _arr[i + 1] += _arr[i] / base;
        _arr[i] %= base;
    }
}
bign::bign (void) : _m(0) { memset(_arr, 0, sizeof(_arr)); }
bign::bign (int init) : _m(0)
{
    memset(_arr, 0, sizeof(_arr));
    _arr[0] = init;
    _simplify();
}
istream& operator >> (istream& fin, bign& a)
{
    char init[10010]; int len, b, t;
    fin >> init;
    len = strlen(init); a._m = -1;
    for (int i = len - 1; i >= 0;)
    {
        t = 0, b = 1;
        for (int j = 0; j < digit && i >= 0; j++, i--)
        {
            t += (init[i] - '0') * b;
            b *= 10;
        }
        a._arr[++a._m] = t;
    }
    return fin;
}
bign operator / (bign a, int b)
{
    for (int i = a._m; i >= 0; i--)
    {
        if (a._arr[i] < b && i == a._m && i != 0) a._m--;
        if (i > 0) a._arr[i - 1] += (a._arr[i] % b) * base;
        a._arr[i] /= b;
    } return a;
}
int operator % (bign a, int b)
{
    for (int i = a._m; i >= 0; i--)
    {
        if (i == 0) return a._arr[i] % b;
        else a._arr[i - 1] += (a._arr[i] % b) * base;
    }
}
bool operator == (bign a, bign b)
{
    if (a._m != b._m) return false;
    for (int i = 0; i <= a._m; i++)
        if (a._arr[i] != b._arr[i]) return false;
    return true;
}

int cha_a[110], cha_b[110];
int hm[510], hk[510], rm, rk, bs[510], md[510];
struct rec 
{
    __int64 gcd, crdx, crdy;
    rec (void) {}
    rec (__int64 g0, __int64 cx0, __int64 cy0) : gcd(g0), crdx(cx0), crdy(cy0) {}
};
rec euclid (__int64 x, __int64 y)
{
    if (y == 0) return rec(x, 1, 0);
    else
    {
        rec ans = euclid(y, x % y);
        return rec(ans.gcd, ans.crdy, ans.crdx - (x / y) * ans.crdy);
    }
}
pair<int, int> trans (int *cha, int hhm, int hhk)
{
    int round = 0, cnt = 0, p = hhm;
    while (1)
    {
        if (p == hhk) break;
        else if (cnt && p == hhm) { cnt = -1; break; }
        p = cha[p], ++cnt;
    }
    if (cnt == -1) return make_pair(-1, 0);
    while (1)
    {
        if (round && p == hhk) break;
        p = cha[p], ++round;
    } return make_pair(cnt, round);
}

int main ()
{
    bign m, k; int d; __int64 lm, lb, z;
    while (1)
    {
        restart: cin >> d;
        if (d == -1) break;
        for (int i = 1; i < d; i++) cin >> cha_a[i];
        for (int i = 0; i < d; i++) cin >> cha_b[i];
        cin >> m >> k;
        for (rm = 0; !(m == 0); rm++)
        {
            hm[rm] = m % d;
            m = m / d;
        }
        for (rk = 0; !(k == 0); rk++)
        {
            hk[rk] = k % d;
            k = k / d;
        }
        if (rm != rk) { printf("NO\n"); goto restart; }
        for (int i = 0; i < rm - 1; i++)
        {
            pair<int, int> adp = trans(cha_b, hm[i], hk[i]);
            if (adp.first == -1) { printf("NO\n"); goto restart; }
            else md[i] = adp.first, bs[i] = adp.second;
        }
        pair<int, int> adp = trans(cha_a, hm[rm - 1], hk[rm - 1]);
        if (adp.first == -1) { printf("NO\n"); goto restart; }
        else md[rm - 1] = adp.first, bs[rm - 1] = adp.second;
        lm = 0, lb = 1;
        for (int i = 0; i < rm; i++)
        {
            rec adp = euclid(lb, bs[i]);
            if ((lm - md[i]) % adp.gcd) { printf("NO\n"); goto restart; }
            z = adp.crdy * ((lm - md[i]) / adp.gcd);
            lb = lb / adp.gcd * bs[i];
            lm = z * bs[i] + md[i];
            lm = ((lm % lb) + lb) % lb;
        }
        // FOR POJ Submittion, please use: 
        //      printf("%I64d\n", lm);
        printf("%lld\n", lm);
    } 
    return 0;
}
