#include <bits/stdc++.h>
long long ans;
struct ray {
  int x, y, d;
  bool operator!=(const ray that) const {
    return (this->x != that.x) || (this->y != that.y) || (this->d != that.d);
  }
};
std::set<int> blk1[100005 << 1], blk2[100005 << 1];
std::set<std::pair<int, int> > mp;
int n, m, k;
int GetId(int x, int y, int d);
void AddBlk(int x, int y);
std::pair<ray, int> DFS(ray now);
bool Check(ray now);
int main() {
  std::cin >> n >> m >> k;
  for (int i = 1; i <= n; i++) {
    AddBlk(i, 0);
    AddBlk(i, m + 1);
  }
  for (int i = 0; i <= m + 1; i++) {
    AddBlk(0, i);
    AddBlk(n + 1, i);
  }
  for (int i = 1, x, y; i <= k; i++) {
    std::cin >> x >> y;
    AddBlk(x, y);
  }
  int sX, sY, dire;
  std::string direction;
  std::cin >> sX >> sY >> direction;
  if (direction == "NW") {
    dire = 1;
  } else if (direction == "NE") {
    dire = 2;
  } else if (direction == "SE") {
    dire = 3;
  } else if (direction == "SW") {
    dire = 4;
  }
  ray now = ray{sX, sY, dire};
  now = DFS(now).first;
  if (!Check(now)) {
    ans--;
    if (now.d == 1) {
      now.d = 3;
    } else if (now.d == 2) {
      now.d = 4;
    } else if (now.d == 3) {
      now.d = 1;
    } else if (now.d == 4) {
      now.d = 2;
    }
    Check(now);
  }
  std::cout << ans;
  return 0;
}
bool Check(ray now) {
  ray tmp = now;
  do {
    std::pair<ray, int> cur = DFS(now);
    ans += (long long)cur.second;
    if (cur.first.d == 1) {
      if (now.d == 3) {
        return false;
      }
    } else if (cur.first.d == 2) {
      if (now.d == 4) {
        return false;
      }
    } else if (cur.first.d == 3) {
      if (now.d == 1) {
        return false;
      }
    } else if (cur.first.d == 4) {
      if (now.d == 2) {
        return false;
      }
    }
    now = cur.first;
  } while (tmp != now);
  return true;
}
std::pair<ray, int> DFS(ray now) {
  ray ret;
  std::set<int>::iterator it;
  if (now.d == 1) {
    it = blk1[GetId(now.x, now.y, 1)].lower_bound(now.x);
    it--;
    ret.x = now.x - std::abs((*it) - now.x) + 1;
    ret.y = now.y - std::abs((*it) - now.x) + 1;
    if (mp.find(std::make_pair(ret.x - 1, ret.y)) != mp.end() &&
        mp.find(std::make_pair(ret.x, ret.y - 1)) != mp.end()) {
      ret.d = 3;
    } else if (mp.find(std::make_pair(ret.x - 1, ret.y)) != mp.end()) {
      ret.y--, ret.d = 4;
    } else if (mp.find(std::make_pair(ret.x, ret.y - 1)) != mp.end()) {
      ret.x--, ret.d = 2;
    } else {
      ret.d = 3;
    }
  } else if (now.d == 2) {
    it = blk2[GetId(now.x, now.y, 2)].lower_bound(now.x);
    it--;
    ret.x = now.x - std::abs((*it) - now.x) + 1;
    ret.y = now.y + std::abs((*it) - now.x) - 1;
    if (mp.find(std::make_pair(ret.x - 1, ret.y)) != mp.end() &&
        mp.find(std::make_pair(ret.x, ret.y + 1)) != mp.end()) {
      ret.d = 4;
    } else if (mp.find(std::make_pair(ret.x - 1, ret.y)) != mp.end()) {
      ret.y++, ret.d = 3;
    } else if (mp.find(std::make_pair(ret.x, ret.y + 1)) != mp.end()) {
      ret.x--, ret.d = 1;
    } else {
      ret.d = 4;
    }
  } else if (now.d == 3) {
    it = blk1[GetId(now.x, now.y, 1)].lower_bound(now.x);
    ret.x = now.x + std::abs((*it) - now.x) - 1;
    ret.y = now.y + std::abs((*it) - now.x) - 1;
    if (mp.find(std::make_pair(ret.x + 1, ret.y)) != mp.end() &&
        mp.find(std::make_pair(ret.x, ret.y + 1)) != mp.end()) {
      ret.d = 1;
    } else if (mp.find(std::make_pair(ret.x + 1, ret.y)) != mp.end()) {
      ret.y++, ret.d = 2;
    } else if (mp.find(std::make_pair(ret.x, ret.y + 1)) != mp.end()) {
      ret.x++, ret.d = 4;
    } else {
      ret.d = 1;
    }
  } else if (now.d == 4) {
    it = blk2[GetId(now.x, now.y, 2)].lower_bound(now.x);
    ret.x = now.x + std::abs((*it) - now.x) - 1;
    ret.y = now.y - std::abs((*it) - now.x) + 1;
    if (mp.find(std::make_pair(ret.x + 1, ret.y)) != mp.end() &&
        mp.find(std::make_pair(ret.x, ret.y - 1)) != mp.end()) {
      ret.d = 2;
    } else if (mp.find(std::make_pair(ret.x + 1, ret.y)) != mp.end()) {
      ret.y--, ret.d = 1;
    } else if (mp.find(std::make_pair(ret.x, ret.y - 1)) != mp.end()) {
      ret.x++, ret.d = 3;
    } else {
      ret.d = 2;
    }
  }
  return std::make_pair(ret, std::abs((*it) - now.x));
}
void AddBlk(int x, int y) {
  blk1[GetId(x, y, 1)].insert(x);
  blk2[GetId(x, y, 2)].insert(x);
  mp.insert(std::make_pair(x, y));
}
int GetId(int x, int y, int d) { return d == 1 ? x - y + m + 1 : x + y; }
