#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > v[2];
int n, m, k;
int x, y, dx, dy;
int mark;
char s[5];
long long ans;
inline int read() {
  int s = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    s = (s << 1) + (s << 3) + ch - '0', ch = getchar();
  return s * f;
}
void add(int x, int y) {
  v[0].push_back(pair<int, int>(x - y, x));
  v[1].push_back(pair<int, int>(x + y, x));
}
void op() {
  int opt = (dx != dy);
  pair<int, int> p = opt ? pair<int, int>(x + y, x) : pair<int, int>(x - y, x);
  vector<pair<int, int> >::iterator it =
      upper_bound(v[opt].begin(), v[opt].end(), p);
  while (it->first != p.first) --it;
  if (dx < 0)
    while (it->second >= x) --it;
  ans += abs(x - (it->second)) - 1;
  x = it->second;
  y = opt ? (it->first - x) : (x - it->first);
  bool flag = binary_search(v[0].begin(), v[0].end(),
                            pair<int, int>(x - y - dx, x - dx));
  bool flbg =
      binary_search(v[0].begin(), v[0].end(), pair<int, int>(x - y + dy, x));
  if (flag == flbg) {
    mark = 1;
    dx = -dx;
    dy = -dy;
  } else {
    if (flag) {
      x -= dx;
      dy = -dy;
    } else if (flbg) {
      y -= dy;
      dx = -dx;
    }
  }
}
int main() {
  n = read();
  m = read();
  k = read();
  for (int i = 1; i <= m; i++) add(0, i), add(n + 1, i);
  for (int i = 0; i <= n + 1; i++) add(i, 0), add(i, m + 1);
  for (int i = 1; i <= k; i++) {
    x = read();
    y = read();
    add(x, y);
  }
  x = read();
  y = read();
  scanf("%s", s);
  dx = (s[0] == 'N' ? -1 : 1);
  dy = (s[1] == 'W' ? -1 : 1);
  sort(v[0].begin(), v[0].end());
  sort(v[1].begin(), v[1].end());
  op();
  int mx = x, my = y, mdx = dx, mdy = dy;
  ans = 0;
  do {
    op();
  } while (!(mx == x && my == y && mdx == dx && mdy == dy));
  printf("%lld", mark ? (ans >> 1) : ans);
}
