#include <bits/stdc++.h>
using namespace std;
struct black {
  int x, y;
} a[1000000];
map<pair<pair<int, int>, int>, int> vis;
map<string, int> mmp;
map<pair<int, int>, int> z;
set<int> s1[200001];
map<int, set<int> > s2;
inline int judge(int x, int y, int d, int l) {
  if (d & 1) {
    set<int>::iterator it = s1[x + y].lower_bound(x), itt = it;
    it--;
    if (d == 1)
      return *itt > x + l;
    else
      return *it < x - l;
  } else {
    set<int>::iterator it = s2[x - y].lower_bound(x), itt = it;
    it--;
    if (d == 2)
      return *itt > x + l;
    else
      return *it < x - l;
  }
}
inline int gox(int x, int d, int l) {
  if (d <= 2)
    return x + l;
  else
    return x - l;
}
inline int goy(int x, int d, int l) {
  if (d == 2 || d == 3)
    return x + l;
  else
    return x - l;
}
int main() {
  mmp["NE"] = 1;
  mmp["NW"] = 2;
  mmp["SW"] = 3;
  mmp["SE"] = 4;
  int n, m, k, x, y, d;
  long long res = 0;
  string ss;
  cin >> n >> m >> k;
  for (register int i = 1; i <= k; i++)
    cin >> x >> y, z[make_pair(x, y)] = 1, s1[x + y].insert(x),
                                  s2[x - y].insert(x);
  for (register int i = 0; i <= m + 1; i++) {
    x = 0, y = i;
    z[make_pair(x, y)] = 1, s1[x + y].insert(x), s2[x - y].insert(x);
    x = n + 1;
    z[make_pair(x, y)] = 1, s1[x + y].insert(x), s2[x - y].insert(x);
  }
  for (register int i = 1; i <= n; i++) {
    x = i, y = 0;
    z[make_pair(x, y)] = 1, s1[x + y].insert(x), s2[x - y].insert(x);
    y = m + 1;
    z[make_pair(x, y)] = 1, s1[x + y].insert(x), s2[x - y].insert(x);
  }
  cin >> x >> y >> ss;
  d = mmp[ss];
  int sx = x, sy = y, sd = d;
  while (!vis[make_pair(make_pair(x, y), d)]) {
    int flag = (x == sx && y == sy && d == sd);
    if (!flag) vis[make_pair(make_pair(x, y), d)] = 1;
    int l = 0, r = max(n, m), ans = -1;
    while (l <= r) {
      int mid = (l + r) >> 1;
      if (judge(x, y, d, mid))
        ans = mid, l = mid + 1;
      else
        r = mid - 1;
    }
    int dd;
    if (d == 1) dd = 3;
    if (d == 2) dd = 4;
    if (d == 3) dd = 1;
    if (d == 4) dd = 2;
    flag |= vis[make_pair(make_pair(gox(x, d, ans), goy(y, d, ans)), dd)];
    x = gox(x, d, ans + 1);
    y = goy(y, d, ans + 1);
    if (d == 1) {
      if (z[make_pair(x, y + 1)] && !z[make_pair(x - 1, y)])
        d = 4, x--;
      else if (!z[make_pair(x, y + 1)] && z[make_pair(x - 1, y)])
        d = 2, y++;
      else
        d = 3, x--, y++;
    } else if (d == 2) {
      if (z[make_pair(x, y - 1)] && !z[make_pair(x - 1, y)])
        d = 3, x--;
      else if (!z[make_pair(x, y - 1)] && z[make_pair(x - 1, y)])
        d = 1, y--;
      else
        d = 4, x--, y--;
    } else if (d == 3) {
      if (z[make_pair(x, y - 1)] && !z[make_pair(x + 1, y)])
        d = 2, x++;
      else if (!z[make_pair(x, y - 1)] && z[make_pair(x + 1, y)])
        d = 4, y--;
      else
        d = 1, y--, x++;
    } else {
      if (z[make_pair(x, y + 1)] && !z[make_pair(x + 1, y)])
        d = 1, x++;
      else if (!z[make_pair(x, y + 1)] && z[make_pair(x + 1, y)])
        d = 3, y++;
      else
        d = 2, x++, y++;
    }
    if (!flag) res += ans + 1;
  }
  cout << res << endl;
  return 0;
}
