#include <bits/stdc++.h>
using namespace std;
inline int rd() {
  int ret = 0, f = 1;
  char c;
  while (c = getchar(), !isdigit(c)) f = c == '-' ? -1 : 1;
  while (isdigit(c)) ret = ret * 10 + c - '0', c = getchar();
  return ret * f;
}
struct CBSV {
  int fi, se;
  CBSV(int X, int Y) {
    fi = X;
    se = Y;
  }
  bool operator<(const CBSV &rhs) const {
    return rhs.fi == fi ? se < rhs.se : fi < rhs.fi;
  }
};
int n, m, lim;
long long ans;
int sx, sy, sdx, sdy;
int cur, dir, dx, dy, db = 0;
vector<CBSV> V[2];
vector<CBSV>::iterator it;
inline void add(int x, int y) {
  V[0].push_back(CBSV(x - y, x));
  V[1].push_back(CBSV(x + y, x));
}
void work(int &x, int &y) {
  dir = (dx != dy);
  CBSV now = dir ? CBSV(x + y, x) : CBSV(x - y, x);
  it = upper_bound(V[dir].begin(), V[dir].end(), now);
  while (it->fi != now.fi) it--;
  if (dx < 0)
    while (it->se >= x) it--;
  ans += abs(x - it->se) - 1;
  x = it->se;
  y = dir ? it->fi - x : x - it->fi;
  int u = binary_search(V[0].begin(), V[0].end(), CBSV(x - y - dx, x - dx));
  int v = binary_search(V[0].begin(), V[0].end(), CBSV(x - y + dy, x));
  if (u == v)
    db = 1, dx *= -1, dy *= -1;
  else if (u)
    x -= dx, dy *= -1;
  else if (v)
    y -= dy, dx *= -1;
}
int main() {
  n = rd();
  m = rd();
  lim = rd();
  int x, y;
  for (int i = 1; i <= lim; i++) {
    x = rd();
    y = rd();
    add(x, y);
  }
  for (int i = 0; i <= n + 1; i++) add(i, 0), add(i, m + 1);
  for (int i = 0; i <= m + 1; i++) add(0, i), add(n + 1, i);
  sort(V[0].begin(), V[0].end());
  sort(V[1].begin(), V[1].end());
  char s[50];
  x = rd();
  y = rd();
  scanf("%s", s);
  dx = s[0] == 'N' ? -1 : 1;
  dy = s[1] == 'W' ? -1 : 1;
  work(x, y);
  ans = 0;
  sx = x;
  sy = y;
  sdx = dx;
  sdy = dy;
  do work(x, y);
  while (!(x == sx && y == sy && dx == sdx && dy == sdy));
  if (db) ans >>= 1;
  cout << ans;
}
