#include <bits/stdc++.h>

using namespace std;

const int N = 60;
const int M = 110;

int n, xo, yo, t;
int xs, ys, xe, ye;
bool g[N][N][4];
bool vis[N][N][4][M][12];
bool f[N][N];
//0: north
//1: east
//2: sourth
//3: west
int c[M];
int d[M];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
vector<pair<int, int> > ans;

void dfs(int x, int y, int dire, int dep, int dis) {
//  printf("%d %d %d %d %d\n", x, y, dire, dep, dis);
//  printf("%d %d %d %d\n", g[x][y][0], g[x][y][1], g[x][y][2], g[x][y][3]);
  if ( dire>=0 && vis[x][y][dire][dep][dis]) {
    return;
  }
  if (dire>=0) vis[x][y][dire][dep][dis] = 1;
  if (dis == d[dep]) {
//    dis = 0;
//    dep++;
    if (dire == c[dep]) {
      dis = 0;
      dep++;
      if (dep == t + 1) {
        if (!f[x][y]) {
          ans.push_back(make_pair(x, y));
          f[x][y] = 1;
        }
        return;
      }
      else {
        for (int i = 0; i < 4; ++i) {
          if (max(dire, i) - min(dire, i) != 2) { //check u turns
            if (g[x][y][i]) {
              int tx = x + dx[i], ty = y + dy[i];
              dfs(tx, ty, i, dep, dis + 1);
            }
          }
        }
        return;
      }
    }
    else {
      dis = 0;
      int nd = c[dep];
      dep++;
      if (g[x][y][nd] && max(nd, dire) - min(nd, dire) != 2) {
        if (dep == t + 1) {
          if (!f[x][y]) {
            ans.push_back(make_pair(x, y));
            f[x][y] = 1;
          }
          return;
        }
        else {
          int tx = x + dx[nd], ty = y + dy[nd];
          dfs(tx, ty, nd, dep, dis + 1);
          return;
        }
      }
      else return;
    }
  }
  else {
    for (int i = 0; i < 4; ++i) {
      if (max(dire, i) - min(dire, i) != 2 || dire == -1) { //check u turns
        if (g[x][y][i]) {
          int tx = x + dx[i], ty = y + dy[i];
          dfs(tx, ty, i, dep, dis + 1);
        }
      }
    }
  }
}

int main() {
  while (1) {
    memset(g, 0, sizeof(g));
    memset(vis, 0, sizeof(vis));
    memset(f, 0, sizeof(f));
    memset(c, 0, sizeof(c));
    memset(d, 0, sizeof(d));
    ans.clear();
    d[0] = -12;
    if (scanf("%d%d%d%d", &n, &xo, &yo, &t) < 0) break;
    for (int i = 0; i < n; ++i) {
      scanf("%d%d%d%d", &xs, &ys, &xe, &ye);
      if (xs == xe) {
        int l = min(ys, ye), h = max(ys, ye);
        for (int j = l+1; j < h; ++j) {
          g[xs][j][0] = g[xs][j][2] = 1;
        }
        g[xs][l][0]=1;
        g[xs][h][2]=1;
      }
      else {
        int l = min(xs, xe), h = max(xs, xe);
        for (int j = l+1; j < h; ++j) {
          g[j][ys][1] = g[j][ys][3] = 1;
        }
        g[l][ys][1]=1;
        g[h][ys][3]=1;
      }
    }
    for (int i = 1; i <= t; ++i) {
      char s[10];
      scanf("%d%s", d + i, s);
      if (s[0] == 'N') 
        c[i] = 0;
      else if (s[0] == 'E')
        c[i] = 1;
      else if (s[0] == 'S') 
        c[i] = 2;
      else 
        c[i] = 3;
    }
    dfs(xo, yo, -1, 1, 0);
    sort(ans.begin(), ans.end());
    for (int i = 0; i < ans.size(); ++i) {
      printf("%d %d\n", ans[i].first, ans[i].second);
    }
  }
  return 0;
}
