#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m, k, x, y;
char s[5];
struct mirror {
  int x, y;
} q[N];
vector<int> zhu[2 * N], fu[2 * N];
map<pair<int, int>, bool> vis;
map<pair<int, int>, bool> p;
int id;
int dx, dy;
long long ans, tot;
int find(bool x, int i, int l, int r, int pos) {
  int as = -1;
  if (x == 1) {
    while (l <= r) {
      int mid = l + r >> 1;
      if (zhu[i][mid] < pos)
        as = zhu[i][mid], l = mid + 1;
      else
        r = mid - 1;
    }
    return as;
  } else {
    while (l <= r) {
      int mid = l + r >> 1;
      if (fu[i][mid] < pos)
        as = fu[i][mid], l = mid + 1;
      else
        r = mid - 1;
    }
    return as;
  }
}
int findbig(bool x, int i, int l, int r, int pos) {
  int as = -1;
  if (x == 1) {
    while (l <= r) {
      int mid = l + r >> 1;
      if (zhu[i][mid] > pos)
        as = zhu[i][mid], r = mid - 1;
      else
        l = mid + 1;
    }
    return as;
  } else {
    while (l <= r) {
      int mid = l + r >> 1;
      if (fu[i][mid] > pos)
        as = fu[i][mid], r = mid - 1;
      else
        l = mid + 1;
    }
    return as;
  }
}
bool run(int dx, int dy, int x, int y) {
  tot = 0;
  while (!p[make_pair(x, y)]) {
    p[make_pair(x, y)] = 1;
    if (dx + dy == 0) {
      if (dx == 1) {
        int pos = find(1, x + y - 1, 0, zhu[x + y - 1].size() - 1, y);
        tot += y - pos;
        x = x + y - 1 - pos;
        y = pos + 1;
        if (vis[make_pair(x + 1, y)] && vis[make_pair(x, y - 1)])
          return 0;
        else if (vis[make_pair(x + 1, y)])
          dx = -dx, y--;
        else if (vis[make_pair(x, y - 1)])
          dy = -dy, x++;
        else
          return 0;
      } else {
        int pos = findbig(1, x + y - 1, 0, zhu[x + y - 1].size() - 1, y);
        tot += pos - y;
        x = x + y - 1 - pos + 2;
        y = pos - 1;
        if (vis[make_pair(x - 1, y)] && vis[make_pair(x, y + 1)])
          return 0;
        else if (vis[make_pair(x - 1, y)])
          dx = -dx, y++;
        else if (vis[make_pair(x, y + 1)])
          dy = -dy, x--;
        else
          return 0;
      }
    } else {
      if (dx == -1) {
        int pos = find(0, m - y + x, 0, fu[x + m - y].size() - 1, y);
        tot += y - pos;
        x = x - y + pos + 1;
        y = pos + 1;
        if (vis[make_pair(x - 1, y)] && vis[make_pair(x, y - 1)])
          return 0;
        else if (vis[make_pair(x - 1, y)])
          dx = -dx, y--;
        else if (vis[make_pair(x, y - 1)])
          dy = -dy, x--;
        else
          return 0;
      } else {
        int pos = findbig(0, m - y + x, 0, fu[x + m - y].size() - 1, y);
        tot += pos - y;
        x = x - y + pos - 1;
        y = pos - 1;
        if (vis[make_pair(x + 1, y)] && vis[make_pair(x, y + 1)])
          return 0;
        else if (vis[make_pair(x + 1, y)])
          dx = -dx, y++;
        else if (vis[make_pair(x, y + 1)])
          dy = -dy, x++;
        else
          return 0;
      }
    }
  }
  return 1;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= k; i++) {
    scanf("%d%d", &q[i].x, &q[i].y);
    vis[make_pair(q[i].x, q[i].y)] = 1;
    zhu[q[i].x + q[i].y - 1].push_back(q[i].y);
    fu[m - q[i].y + q[i].x].push_back(q[i].y);
  }
  for (int i = 0; i <= n; i++) {
    vis[make_pair(i, 0)] = 1;
    zhu[i + 0 - 1].push_back(0);
    fu[m - 0 + i].push_back(0);
  }
  for (int i = n + 1; i > 0; i--) {
    vis[make_pair(i, m + 1)] = 1;
    zhu[i + m + 1 - 1].push_back(m + 1);
    fu[m - (m + 1) + i].push_back(m + 1);
  }
  for (int i = 0; i <= m; i++) {
    vis[make_pair(n + 1, i)] = 1;
    zhu[n + 1 + i - 1].push_back(i);
    fu[m - i + n + 1].push_back(i);
  }
  for (int i = m + 1; i > 0; i--) {
    vis[make_pair(0, i)] = 1;
    zhu[0 + i - 1].push_back(i);
    fu[m - i + 0].push_back(i);
  }
  for (int i = 1; i <= n + m - 1; i++)
    sort(zhu[i].begin(), zhu[i].end()), sort(fu[i].begin(), fu[i].end());
  scanf("%d%d%s", &x, &y, s);
  if (s[0] == 'N' && s[1] == 'E')
    dx = -1, dy = 1;
  else if (s[0] == 'N' && s[1] == 'W')
    dx = -1, dy = -1;
  else if (s[0] == 'S' && s[1] == 'W')
    dx = 1, dy = -1;
  else if (s[0] == 'S' && s[1] == 'E')
    dx = 1, dy = 1;
  if (dx + dy == 0) {
    if (dx == 1) {
      int pos = find(1, x + y - 1, 0, zhu[x + y - 1].size() - 1, y);
      x = x + y - 1 - pos;
      y = pos + 1;
      if (vis[make_pair(x + 1, y)] && vis[make_pair(x, y - 1)])
        dx = -dx, dy = -dy;
      else if (vis[make_pair(x + 1, y)])
        dx = -dx, y--;
      else if (vis[make_pair(x, y - 1)])
        dy = -dy, x++;
      else
        dx = -dx, dy = -dy;
    } else {
      int pos = findbig(1, x + y - 1, 0, zhu[x + y - 1].size() - 1, y);
      x = x + y - 1 - pos + 2;
      y = pos - 1;
      if (vis[make_pair(x - 1, y)] && vis[make_pair(x, y + 1)])
        dx = -dx, dy = -dy;
      else if (vis[make_pair(x - 1, y)])
        dx = -dx, y++;
      else if (vis[make_pair(x, y + 1)])
        dy = -dy, x--;
      else
        dx = -dx, dy = -dy;
    }
  } else {
    if (dx == -1) {
      int pos = find(0, m - y + x, 0, fu[x + m - y].size() - 1, y);
      x = x - y + pos + 1;
      y = pos + 1;
      if (vis[make_pair(x - 1, y)] && vis[make_pair(x, y - 1)])
        dx = -dx, dy = -dy;
      else if (vis[make_pair(x - 1, y)])
        dx = -dx, y--;
      else if (vis[make_pair(x, y - 1)])
        dy = -dy, x--;
      else
        dx = -dx, dy = -dy;
    } else {
      int pos = findbig(0, m - y + x, 0, fu[x + m - y].size() - 1, y);
      x = x - y + pos - 1;
      y = pos - 1;
      if (vis[make_pair(x + 1, y)] && vis[make_pair(x, y + 1)])
        dx = -dx, dy = -dy;
      else if (vis[make_pair(x + 1, y)])
        dx = -dx, y++;
      else if (vis[make_pair(x, y + 1)])
        dy = -dy, x++;
      else
        dx = -dx, dy = -dy;
    }
  }
  if (run(dx, dy, x, y))
    printf("%lld", tot);
  else {
    ans = tot - 1;
    p[make_pair(x, y)] = 0;
    dx = -dx, dy = -dy;
    run(dx, dy, x, y);
    ans += tot;
    printf("%lld", ans);
  }
}
