#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <queue>

using namespace std;

int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
bool dp[2][51][51][4];
bool fie[52][52][4];
int n,sx,sy,t;

int main(void){
	scanf("%d%d%d%d",&n,&sx,&sy,&t);
	memset(fie,false,sizeof(fie));
	for(int i=0;i<n;i++){
		int ax,ay,bx,by;
		scanf("%d%d%d%d",&ax,&ay,&bx,&by);
		if(ax>bx)swap(ax,bx);
		if(ay>by)swap(ay,by);
		if(ax==bx){
			fie[ay][ax][1]=true;
			for(int j=ay+1;j<by;j++){
				fie[j][ax][1]=true;
				fie[j][ax][3]=true;
			}
			fie[by][ax][3]=true;
		}else{
			fie[ay][ax][0]=true;
			for(int j=ax+1;j<bx;j++){
				fie[ay][j][0]=true;
				fie[ay][j][2]=true;
			}
			fie[ay][bx][2]=true;
		}
	}
	int prev=0,now=1;
	memset(dp,false,sizeof(dp));
	for(int i=0;i<4;i++){
		dp[0][sy][sx][i]=true;
	}
	for(int i=0;i<t;i++){
		int d,dir;
		char di;
		scanf("%d %c",&d,&di);
		if(di=='E')dir=0;
		if(di=='N')dir=1;
		if(di=='W')dir=2;
		if(di=='S')dir=3;
		for(int dd=0;dd<d;dd++){
			for(int j=0;j<=50;j++){
				for(int k=0;k<=50;k++){
					for(int l=0;l<4;l++){
						if(dp[prev][j][k][l]){
							for(int m=0;m<4;m++){
								if((m+2)%4==l)continue;
								int nx=k+dx[l],ny=j+dy[l];
								if(nx<0 || ny<0)continue;
								if(!fie[j][k][l] || !fie[ny][nx][m])continue;
								if(dd<d-1 || dir==m || dir==l)dp[now][ny][nx][m]=true;
							}
						}
					}
				}
			}
			swap(now,prev);
			memset(dp[now],false,sizeof(dp[now]));
		}
	}
	for(int j=0;j<=50;j++){
		for(int i=0;i<=50;i++){
			if(dp[prev][i][j][0] || dp[prev][i][j][1] || dp[prev][i][j][2] || dp[prev][i][j][3]){
				printf("%d %d\n",j,i);
			}
		}
	}
	return 0;
}