#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 10000
#define MAXLOG 16
#define MAXQ 100
#define MAXW 1000

#define ASSERT(x) do { if (!(x)) { fprintf(stderr, "Assertion failed on line %d\n", __LINE__); exit(1); } } while(0)

static int l[4*MAX], r[4*MAX], lw[4*MAX], rw[4*MAX], tmp[MAX], tmpe[MAX];
static int N, X;
static int hh[4*MAX*MAXLOG], hhptr;
static int hlen[MAX], htresh[MAX], *hstart[MAX], hcnt[MAX], hshift[MAX];
static int primes[] = { 2, 5, 11, 23, 47, 97, 197, 397, 797, 1597, 3203, 6421, 12853, 25717, 51437, 102877, 205759, 411527, 823117, 1646237 };
#define EMPTY 1000000000

static void hnew(int i, int len) {
	int j = 0;
	while (primes[j] < len)
		j++;
	len = primes[j];
	hstart[i] = hh + hhptr;
	hlen[i] = len;
	hcnt[i] = 0;
	htresh[i] = len*3/4;
	hshift[i] = 0;
	hhptr += len;
	for (j=0; j<len; j++)
		hstart[i][j] = EMPTY;
	/*printf("new %d for %d entries at %d\n", i, len, hstart[i] - hh);*/
	ASSERT((unsigned)hhptr < sizeof(hh) / sizeof(hh[0]));
}

static int hlookup(int i, int x) {
	int *h = hstart[i];
	unsigned j;
	unsigned int l = hlen[i];
	x -= hshift[i];
	j = x % l;
	while (h[j] != EMPTY) {
		if (h[j] == x)
			return 1;
		j++;
		if (j == l)
			j=0;
	}
	return 0;
}

static void rawinsert(int i, int x) {
	int *h = hstart[i];
	unsigned int l = hlen[i];
	unsigned int j = x % l;
	while (h[j] != EMPTY) {
		if (h[j] == x)
			return;
		j++;
		if (j == l)
			j=0;
	}
	h[j] = x;
	hcnt[i]++;
}

static void hrehash(int i) {
	int *h = hstart[i];
	int l = hlen[i];
	int s = hshift[i];
	int j;
	/*printf("rehash %d\n", i);*/
	hnew(i, 2*l);
	for (j=0; j<l; j++)
		if (h[j] != EMPTY)
			rawinsert(i, h[j]+s);
}

static void hinsert(int i, int x) {
	rawinsert(i, x-hshift[i]);
	if (hcnt[i] > htresh[i])
		hrehash(i);
}

static void hprint(int i) {
	int j;
	for (j=0; j<hlen[i]; j++)
		if (hstart[i][j] != EMPTY)
			printf("%d ", hstart[i][j] + hshift[i]);
	puts("");
}

static int look(int v, int *zz)
{
	int ah, bh, i, z;
	/*printf("enter %d (%d,%d)\n", v, l[v], r[v]);*/
	if (l[v] >= 0) {
		if (look(l[v], &ah))
			return 1;
		hshift[ah] += lw[v];
		if (hlookup(ah, X))
			return 1;
	} else
		ah = -1;
	if (r[v] >= 0) {
		if (look(r[v], &bh))
			return 1;
		hshift[bh] += rw[v];
		if (hlookup(bh, X))
			return 1;
	} else
		bh = -1;
	if (ah < 0) {
		if (bh < 0) {
			bh = v;
			hnew(bh, 1);
		}
		hinsert(bh, 0);
		*zz = bh;
		goto done;
	}
	if (bh < 0) {
		hinsert(ah, 0);
		*zz = ah;
		goto done;
	}
	if (hcnt[ah] < hcnt[bh]) {
		z = ah;
		ah = bh;
		bh = z;
	}
	for (i=0; i<hlen[bh]; i++)
		if (hstart[bh][i] != EMPTY) {
			int d = hstart[bh][i] + hshift[bh];
			if (hlookup(ah, X-d))
				return 1;
		}
	hinsert(ah, 0);
	for (i=0; i<hlen[bh]; i++)
		if (hstart[bh][i] != EMPTY) {
			int d = hstart[bh][i] + hshift[bh];
			hinsert(ah, d);
		}
	*zz = ah;
done:
	/*printf("  ret from %d: ", v);*/
	/*hprint(*zz);*/
	return 0;
}

static int calc(void)
{
	int z;
	if (X == 0)
		return 1;
	hhptr = 0;
	return look(0, &z);
}

int main(void)
{
	int i, vv, d, j, ii;
	for(;;) {
		scanf("%d", &N);
		if (!N)
			break;
		ASSERT(N <= MAX);
		vv = N;
		for (i=0; i<N; i++) {
			d = 0;
			for(;;) {
				scanf("%d", &tmp[d]);
				if (!tmp[d])
					break;
				tmp[d]--;
				scanf("%d", &tmpe[d]);
				ASSERT(tmpe[d] >= 0 && tmpe[d] <= MAXW);
				d++;
			}
			if (!d) {
				l[i] = r[i] = -1;
			} else if (d == 1) {
				l[i] = tmp[0];  lw[i] = tmpe[0];
				r[i] = -1;
			} else {
				ii = i;
				j = 0;
				while (d > 2) {
					l[ii] = tmp[j];  lw[ii] = tmpe[j];
					j++;
					r[ii] = vv;
					rw[ii] = 0;
					ii = vv++;
					d--;
				}
				l[ii] = tmp[j];  lw[ii] = tmpe[j];
				j++;
				r[ii] = tmp[j];  rw[ii] = tmpe[j];
			}
		}
#if 0
		for (i=0; i<vv; i++)
			printf("%3d: %3d(%3d)  %3d(%3d)\n", i, l[i], lw[i], r[i], rw[i]);
#endif
		i = 0;
		while (scanf("%d", &X) && X > 0) {
			i++;
			ASSERT(i <= MAXQ);
			if (calc())
				puts("AYE");
			else
				puts("NAY");
		}
		puts(".");
	}
	return 0;
}
