#include <bits/stdc++.h>
using namespace std;
set<pair<int, int> > z[200010], f[200010];
map<int, int> use[200010];
int n, m, k, dir;
int sx, sy;
inline void insert(int x, int y) {
  z[x - y + m + 1].insert(make_pair(x, y));
  f[x + y].insert(make_pair(x, y));
  use[x][y] = 1;
}
void init() {
  char s[3];
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1, x, y; i <= k; i++) {
    scanf("%d%d", &x, &y);
    insert(x, y);
  }
  scanf("%d%d%s", &sx, &sy, s);
  dir = (s[1] == 'E') | ((s[0] == 'S') << 1);
  for (int i = 0; i <= n + 1; i++) insert(i, 0), insert(i, m + 1);
  for (int i = 0; i <= m + 1; i++) insert(0, i), insert(n + 1, i);
}
void go(int x, int y, int d, int &x1, int &y1, int &d1, int &px, int &py) {
  int a, b;
  if (d == 0) {
    set<pair<int, int> >::iterator p =
        z[x - y + m + 1].lower_bound(make_pair(x, y));
    p--;
    px = p->first;
    py = p->second;
    a = use[px + 1].count(py);
    b = use[px].count(py + 1);
    if (!a && b) {
      x1 = px + 1;
      y1 = py;
      d1 = 2;
    } else if (a && !b) {
      x1 = px;
      y1 = py + 1;
      d1 = 1;
    } else {
      x1 = px + 1;
      y1 = py + 1;
      d1 = 3;
    }
  } else if (d == 1) {
    set<pair<int, int> >::iterator p = f[x + y].lower_bound(make_pair(x, y));
    p--;
    px = p->first;
    py = p->second;
    a = use[px + 1].count(py);
    b = use[px].count(py - 1);
    if (!a && b) {
      x1 = px + 1;
      y1 = py;
      d1 = 3;
    } else if (a && !b) {
      x1 = px;
      y1 = py - 1;
      d1 = 0;
    } else {
      x1 = px + 1;
      y1 = py - 1;
      d1 = 2;
    }
  } else if (d == 2) {
    set<pair<int, int> >::iterator p = f[x + y].upper_bound(make_pair(x, y));
    px = p->first;
    py = p->second;
    a = use[px - 1].count(py);
    b = use[px].count(py + 1);
    if (!a && b) {
      x1 = px - 1;
      y1 = py;
      d1 = 0;
    } else if (a && !b) {
      x1 = px;
      y1 = py + 1;
      d1 = 3;
    } else {
      x1 = px - 1;
      y1 = py + 1;
      d1 = 1;
    }
  } else {
    set<pair<int, int> >::iterator p =
        z[x - y + m + 1].upper_bound(make_pair(x, y));
    px = p->first;
    py = p->second;
    a = use[px - 1].count(py);
    b = use[px].count(py - 1);
    if (!a && b) {
      x1 = px - 1;
      y1 = py;
      d1 = 1;
    } else if (a && !b) {
      x1 = px;
      y1 = py - 1;
      d1 = 2;
    } else {
      x1 = px - 1;
      y1 = py - 1;
      d1 = 0;
    }
  }
}
void solve() {
  long long ans = 0;
  int rep = 0;
  int xx, yy, dd, px, py;
  go(sx, sy, dir, sx, sy, dir, px, py);
  for (int x = sx, y = sy, d = dir;; x = xx, y = yy, d = dd) {
    go(x, y, d, xx, yy, dd, px, py);
    ans += abs(x - px);
    if (xx == sx && yy == sy && dd == dir) break;
    if (dd + d == 3) rep = 1;
  }
  if (rep) ans >>= 1;
  printf("%I64d\n", ans);
}
int main() {
  init();
  solve();
  return 0;
}
