#include <bits/stdc++.h>
using namespace std;
map<int, int> c[100005];
pair<int, int> g[100005];
set<pair<int, int> > p[200005], q[200005];
int n, m, k;
void work(int x, int y) {
  pair<int, int> t = make_pair(x, y);
  c[x][y] = 1;
  p[x - y + 100001].insert(t);
  q[x + y].insert(t);
  return;
}
void solve(int x, int y, int d, int &px, int &py, int &nd, int &tx, int &ty) {
  if (d == 0) {
    set<pair<int, int> >::iterator it =
        p[x - y + 100001].lower_bound(make_pair(x, y));
    it--;
    pair<int, int> t = *it;
    tx = t.first, ty = t.second;
    bool a, b;
    if (c[tx + 1][ty])
      a = true;
    else
      a = false;
    if (c[tx][ty + 1])
      b = true;
    else
      b = false;
    if (!a && b) {
      px = tx + 1;
      py = ty;
      nd = 2;
    } else if (a && !b) {
      px = tx;
      py = ty + 1;
      nd = 1;
    } else {
      px = tx + 1;
      py = ty + 1;
      nd = 3;
    }
  } else if (d == 1) {
    set<pair<int, int> >::iterator it = q[x + y].lower_bound(make_pair(x, y));
    it--;
    pair<int, int> t = *it;
    tx = t.first, ty = t.second;
    bool a, b;
    if (c[tx + 1][ty])
      a = true;
    else
      a = false;
    if (c[tx][ty - 1])
      b = true;
    else
      b = false;
    if (!a && b) {
      px = tx + 1;
      py = ty;
      nd = 3;
    } else if (a && !b) {
      px = tx;
      py = ty - 1;
      nd = 0;
    } else {
      px = tx + 1;
      py = ty - 1;
      nd = 2;
    }
  } else if (d == 2) {
    set<pair<int, int> >::iterator it = q[x + y].upper_bound(make_pair(x, y));
    pair<int, int> t = *it;
    tx = t.first, ty = t.second;
    bool a, b;
    if (c[tx - 1][ty])
      a = true;
    else
      a = false;
    if (c[tx][ty + 1])
      b = true;
    else
      b = false;
    if (!a && b) {
      px = tx - 1;
      py = ty;
      nd = 0;
    } else if (a && !b) {
      px = tx;
      py = ty + 1;
      nd = 3;
    } else {
      px = tx - 1;
      py = ty + 1;
      nd = 1;
    }
  } else {
    set<pair<int, int> >::iterator it =
        p[x - y + 100001].upper_bound(make_pair(x, y));
    pair<int, int> t = *it;
    tx = t.first, ty = t.second;
    bool a, b;
    if (c[tx - 1][ty])
      a = true;
    else
      a = false;
    if (c[tx][ty - 1])
      b = true;
    else
      b = false;
    if (!a && b) {
      px = tx - 1;
      py = ty;
      nd = 1;
    } else if (a && !b) {
      px = tx;
      py = ty - 1;
      nd = 2;
    } else {
      px = tx - 1;
      py = ty - 1;
      nd = 0;
    }
  }
}
int main() {
  int i, x, y, d = 0, t = 1, px, py, nd, nx, ny, tx, ty, td;
  string dir;
  long long ans = 0;
  scanf("%d%d%d", &n, &m, &k);
  for (i = 1; i <= k; i++) {
    scanf("%d%d", &g[i].first, &g[i].second);
    work(g[i].first, g[i].second);
  }
  scanf("%d%d", &x, &y);
  cin >> dir;
  if (dir == "NW")
    d = 0;
  else if (dir == "NE")
    d = 1;
  else if (dir == "SW")
    d = 2;
  else
    d = 3;
  for (i = 0; i <= n + 1; i++) {
    work(i, 0);
    work(i, m + 1);
  }
  for (i = 0; i <= m + 1; i++) {
    work(0, i);
    work(n + 1, i);
  }
  solve(x, y, d, x, y, d, px, py);
  nx = x, ny = y, nd = d;
  while (true) {
    solve(x, y, d, tx, ty, td, px, py);
    ans += (int)abs(x - px);
    if (tx == nx && ty == ny && td == nd) break;
    if (td + d == 3) t = 2;
    x = tx;
    y = ty;
    d = td;
  }
  printf("%I64d\n", ans / (long long)t);
  return 0;
}
