#include <iostream>
#include <vector>
using namespace std;
class Point {
public:
char c;
bool visited;
int i, j, depth;
Point () {
this->visited = false;
}
};
typedef vector<Point> vP;
typedef vector<vP> vvP;
typedef vector<Point*> queue;
int main() {
int h, w;
cin >> h >> w;
vvP map(h+2, vP(w+2));
queue BFS;
int i, j;
for (i=1; i<=h; i++) {
for (j=1; j<=w; j++) {
Point& cell = map[i][j];
cell.i = i;
cell.j = j;
cin >> cell.c;
if (cell.c == 'S') {
BFS.emplace_back(&cell);
cell.visited = true;
cell.depth = 0;
}
}
map[i][0].visited = map[i][j].visited = true;
}
for (j=1; j<=w; j++)
map[0][j].visited = map[i][j].visited = true;
int lifes;
cin >> lifes;
lifes *= 4;
int depth;
int item = 0;
do {
Point*& Position = BFS[item++];
if (Position->c == 'x')
continue;
if (Position->c == 'T') {
cout << "SIM\n";
return 0;
}
depth = Position->depth + 1;
i = Position->i;
j = Position->j;
if (depth <= lifes) {
Point& North = map[i-1][j];
Point& East = map[i][j+1];
Point& South = map[i+1][j];
Point& West = map[i][j-1];
if (North.visited == false) {
BFS.emplace_back(&North);
North.visited = true;
North.depth = depth;
}
if (East.visited == false) {
BFS.emplace_back(&East);
East.visited = true;
East.depth = depth;
}
if (South.visited == false) {
BFS.emplace_back(&South);
South.visited = true;
South.depth = depth;
}
if (West.visited == false) {
BFS.emplace_back(&West);
West.visited = true;
West.depth = depth;
}
}
} while (item < BFS.size());
cout << "NAO\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUG9pbnQgewoJcHVibGljOgoJCWNoYXIgYzsKCQlib29sIHZpc2l0ZWQ7CgkJaW50IGksIGosIGRlcHRoOwoJCglQb2ludCAoKSB7CgkJdGhpcy0+dmlzaXRlZCA9IGZhbHNlOwoJfQp9OwoKdHlwZWRlZiB2ZWN0b3I8UG9pbnQ+IHZQOwp0eXBlZGVmIHZlY3Rvcjx2UD4gdnZQOwp0eXBlZGVmIHZlY3RvcjxQb2ludCo+IHF1ZXVlOwoKaW50IG1haW4oKSB7CglpbnQgaCwgdzsKCWNpbiA+PiBoID4+IHc7CgkKCXZ2UCBtYXAoaCsyLCB2UCh3KzIpKTsKCXF1ZXVlIEJGUzsKCQoJaW50IGksIGo7Cglmb3IgKGk9MTsgaTw9aDsgaSsrKSB7CgkJZm9yIChqPTE7IGo8PXc7IGorKykgewoJCQlQb2ludCYgY2VsbCA9IG1hcFtpXVtqXTsKCQkJY2VsbC5pID0gaTsKCQkJY2VsbC5qID0gajsKCQkJCgkJCWNpbiA+PiBjZWxsLmM7CgkJCWlmIChjZWxsLmMgPT0gJ1MnKSB7CgkJCQlCRlMuZW1wbGFjZV9iYWNrKCZjZWxsKTsKCQkJCWNlbGwudmlzaXRlZCA9IHRydWU7CgkJCQljZWxsLmRlcHRoID0gMDsKCQkJfQoJCX0KCQltYXBbaV1bMF0udmlzaXRlZCA9IG1hcFtpXVtqXS52aXNpdGVkID0gdHJ1ZTsKCX0KCWZvciAoaj0xOyBqPD13OyBqKyspCgkJbWFwWzBdW2pdLnZpc2l0ZWQgPSBtYXBbaV1bal0udmlzaXRlZCA9IHRydWU7CgkKCQoJaW50IGxpZmVzOwoJY2luID4+IGxpZmVzOwoJbGlmZXMgKj0gNDsKCQoJCglpbnQgZGVwdGg7CglpbnQgaXRlbSA9IDA7CglkbyB7CgkJCgkJUG9pbnQqJiBQb3NpdGlvbiA9IEJGU1tpdGVtKytdOwoJCQoJCWlmIChQb3NpdGlvbi0+YyA9PSAneCcpCgkJCWNvbnRpbnVlOwoJCQoJCWlmIChQb3NpdGlvbi0+YyA9PSAnVCcpIHsKCQkJY291dCA8PCAiU0lNXG4iOwoJCQlyZXR1cm4gMDsKCQl9CgkJCgkJCgkJZGVwdGggPSBQb3NpdGlvbi0+ZGVwdGggKyAxOwoJCWkgPSBQb3NpdGlvbi0+aTsKCQlqID0gUG9zaXRpb24tPmo7CgkJCgkJaWYgKGRlcHRoIDw9IGxpZmVzKSB7CgkJCQoJCQlQb2ludCYgTm9ydGggPSBtYXBbaS0xXVtqXTsKCQkJUG9pbnQmIEVhc3QgPSBtYXBbaV1baisxXTsKCQkJUG9pbnQmIFNvdXRoID0gbWFwW2krMV1bal07CgkJCVBvaW50JiBXZXN0ID0gbWFwW2ldW2otMV07CgkJCQoJCQlpZiAoTm9ydGgudmlzaXRlZCA9PSBmYWxzZSkgewoJCQkJQkZTLmVtcGxhY2VfYmFjaygmTm9ydGgpOwoJCQkJTm9ydGgudmlzaXRlZCA9IHRydWU7CgkJCQlOb3J0aC5kZXB0aCA9IGRlcHRoOwoJCQl9CgkJCWlmIChFYXN0LnZpc2l0ZWQgPT0gZmFsc2UpIHsKCQkJCUJGUy5lbXBsYWNlX2JhY2soJkVhc3QpOwoJCQkJRWFzdC52aXNpdGVkID0gdHJ1ZTsKCQkJCUVhc3QuZGVwdGggPSBkZXB0aDsKCQkJfQoJCQlpZiAoU291dGgudmlzaXRlZCA9PSBmYWxzZSkgewoJCQkJQkZTLmVtcGxhY2VfYmFjaygmU291dGgpOwoJCQkJU291dGgudmlzaXRlZCA9IHRydWU7CgkJCQlTb3V0aC5kZXB0aCA9IGRlcHRoOwoJCQl9CgkJCWlmIChXZXN0LnZpc2l0ZWQgPT0gZmFsc2UpIHsKCQkJCUJGUy5lbXBsYWNlX2JhY2soJldlc3QpOwoJCQkJV2VzdC52aXNpdGVkID0gdHJ1ZTsKCQkJCVdlc3QuZGVwdGggPSBkZXB0aDsKCQkJfQoJCQkKCQl9CgkJCgl9IHdoaWxlIChpdGVtIDwgQkZTLnNpemUoKSk7CgkKCWNvdXQgPDwgIk5BT1xuIjsKCXJldHVybiAwOwp9