#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>

#define REP(i, n) for((i) = 0; (i) < (n); (i)++)
#define READ1(n1) scanf("%d", &(n1))
#define READ2(n1, n2) scanf("%d%d", &(n1), &(n2))
#define READ3(n1, n2, n3) scanf("%d%d%d", &(n1), &(n2), &(n3))
#define P1(n1) printf("%d\n", (n1))
#define P2(n1, n2) printf("%d, %d\n", (n1), (n2))
#define P3(n1, n2, n3) printf("%d, %d, %d\n", (n1), (n2), (n3))
typedef struct {
	int x, y;
	int flag;
} gem_t;

gem_t gems[20];
int gem_num;
int robot_x = 10, robot_y = 10, rest_gem;

void check_gem(int x, int y) {
	int i;
	REP(i, gem_num) {
		if(gems[i].x == x && gems[i].y == y && gems[i].flag == 0) {
			gems[i].flag = 1;
			rest_gem--;
		}
	}
}

void move_robot(int new_x, int new_y) {
	int delta = (robot_x < new_x) ? 1 : -1;

	for(; robot_x != new_x; robot_x += delta) {
		check_gem(robot_x, robot_y);
	}

	delta = (robot_y < new_y) ? 1 : -1;

	for(; robot_y != new_y; robot_y += delta) {
		check_gem(robot_x, robot_y);
	}

	check_gem(robot_x, robot_y);
}

int main(void)
{
	while(1) {
		int i, j, order_num;

		READ1(gem_num);

		if(gem_num == 0) break;

		rest_gem = gem_num;
		robot_x = 10;
		robot_y = 10;

		REP(i, gem_num) {
			READ2(gems[i].x, gems[i].y);
			gems[i].flag = 0;
		}

		READ1(order_num);

		for(i = 0; i < order_num;) {
			char c = getchar();
			if(c == 'N' || c == 'E' || c == 'W' || c == 'S') {
				int d;
				READ1(d);
				switch(c) {
				case 'N':
					move_robot(robot_x, robot_y + d);
					break;
				case 'E':
					move_robot(robot_x + d, robot_y);
					break;
				case 'W':
					move_robot(robot_x - d, robot_y);
					break;
				case 'S':
					move_robot(robot_x, robot_y - d);
					break;
				}
				i++;
			}
		}

		if(rest_gem == 0) {
			printf("Yes\n");
		} else {
			printf("No\n");
		}
	}
	return 0;
}