#include <iostream>
#include <string>
#include <math.h>
using namespace std;

#define maxViejas 175760000
#define in cin
//#include <fstream>
//ifstream in("3929.txt");

char letras[21] = {'B', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'N', 'O', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

bool correcta(const string& patente) {
    return patente[3] < 58 && patente[4] < 58 || patente[3] > 58 && patente[4] > 58;
}

bool vieja(const string& patente) {
    return patente[3] < 58 && patente[4] < 58;
}

int valor(char a) {
    int izq = 0, der = 20;
    while (izq <= der) {
        int med = (izq + der) / 2;
        if (letras[med] == a)
            return med;
        if (letras[med] < a)
            izq = med + 1;
        else
            der = med - 1;
    }
}

int rnd(double x) {
    return (int) (x + 0.5);
}

int posPatenteVieja(const string& patente) {
    int pos = 0;
    for (int i = 0; i < 3; i++)
        pos += (patente[i]-65) * rnd(pow(26, 2-i));
    pos *= 10000;
    for (int i = 3; i < 7; i++)
        pos += (patente[i]-48) * rnd(pow(10, 6-i));
    return pos;
}

int posPatenteNueva(const string& patente) {
    int pos = 0;
    for (int i = 0; i < 5; i++)
        pos += valor(patente[i]) * rnd(pow(21, 4-i));
    pos *= 100;
    for (int i = 5; i < 7; i++)
        pos += (patente[i]-48) * rnd(pow(10, 6-i));
    return pos + maxViejas;
}

int main() {
    string M, I;
    int C, posM, posI;
    while (in >> M >> I >> C && M != "*") {
        if (correcta(I) && (vieja(I) || I.find_first_of("ACMIP") == string::npos)) {
            posM = vieja(M) ? posPatenteVieja(M) : posPatenteNueva(M);
            posI = vieja(I) ? posPatenteVieja(I) : posPatenteNueva(I);
            cout << ((posI > posM && posI <= posM + C) ? "Y" : "N") << endl;
        } else
            cout << "N" << endl;
    }
    //getchar();
    return 0;
}

