#include using namespace std; using ll=long long; using ld=long double; using vi=vector; using ii=pair; #define FOR(i,a,b) for(int i(a); i < b; i++) #define F(n) FOR(i, 0, n) #define FF(n) FOR(j, 0, n) #define aa first #define bb second #define PB push_back #define MX 250 #define MK 11 #define INF 1<<20 struct ST { int g[MX][MX],d[MX][1< king = {{1, 1}, {1,-1}, {-1, 1}, {-1, -1}, {0, 1}, {1, 0}, {-1, 0}, {0, -1}}; vector knight = {{2, 1}, {2,-1}, {-2, 1}, {-2, -1}, {1, 2}, {1, -2}, {-1, 2}, {-1, -2}}; int main() { ios::sync_with_stdio(0); vi terms; cin >> n >> m; int x, y; cin >> x >> y; x--; y--; terms.PB(tocor(x, y)); char c; cin >> c; int t; cin >> t; F(t) { int w,z; cin >> w >> z; w--; z--; terms.PB(tocor(w, z)); } T.CLR(m*n); for (auto i : terms) { T.AC(i); } F(n)FF(m) { vector moves; switch (c) { case 'K': for (auto k : king) moves.PB({i+k.aa, j+k.bb}); break; case 'N': for (auto k : knight) moves.PB({i+k.aa, j+k.bb}); break; case 'R': FOR(k, 0, n) if (k != i) moves.PB({k, j}); FOR(k, 0, m) if (k != j) moves.PB({i, k}); break; case 'B': for (int k = i+1, l = j+1; k < n && l < m; k++, m++) moves.PB({k, l}); for (int k = i-1, l = j+1; k >= 0 && l < m; k--, m++) moves.PB({k, l}); for (int k = i+1, l = j-1; k < n && l >= 0; k++, m--) moves.PB({k, l}); for (int k = i-1, l = j-1; k >= 0 && l >= 0; k--, m--) moves.PB({k, l}); break; case 'Q': FOR(k, 0, n) if (k != i) moves.PB({k, j}); FOR(k, 0, m) if (k != j) moves.PB({i, k}); for (int k = i+1, l = j+1; k < n && l < m; k++, m++) moves.PB({k, l}); for (int k = i-1, l = j+1; k >= 0 && l < m; k--, m++) moves.PB({k, l}); for (int k = i+1, l = j-1; k < n && l >= 0; k++, m--) moves.PB({k, l}); for (int k = i-1, l = j-1; k >= 0 && l >= 0; k--, m--) moves.PB({k, l}); break; } for (auto k : moves) { if (k.aa < 0 || k.aa >= n || k.bb < 0 || k.bb >= m) { continue; } T.ade(tocor(i, j), tocor(k.aa, k.bb), 1); } } T.GO(); /* for (int i = 0; i < n*m; i++) { FF(15) { cout << i << " - "<< j << ": " << T.d[i][j] << endl; } } */ int res = T.VL((1 << (t+1)) - 1); if (res == INF) { cout << -1 << endl; } else { cout << res << endl; } return 0; }