#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned ll
#define ld long double
typedef vector<int> vi;
typedef multiset<int> mi;
typedef multiset<ll> mll;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef set<ll> sll;
typedef vector<vector<int>> _2vi;
typedef vector<vector<ll>> _2vll;
#define all(v) ((v).begin()), ((v).end())
#define sz(v) ((ll)((v).size()))
#define vinp(v, n) \
for (ull i = 0; i < (n); i++) \
cin >> (v)[i]
#define printv(v) \
for (auto i : (v)) \
cout << i << " "
#define fr0(i, n) for (ull(i) = 0; (i) < (n); (i)++)
#define fr1(i, n) for (ull(i) = 1; (i) < (n); (i)++)
#define fr(i, x, n) for (ull(i) = (x); (i) < (n); (i)++)
#define _CRT_SECURE_NO_WARNING
const ll MOD = 1000000007;
void Bustany() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
#ifndef ONLINE_JUDGE
freopen("./in.txt", "r", stdin), freopen("./out.txt", "w", stdout);
#endif
}
//vector<sll> adj(N);
vector<vector<char>> adj;
vector<vector<ll>> vis;
ll n, m, d;
ll dx[] = {0, 0, 1, -1};
ll dy[] = {1, -1, 0, 0};
void solve() {
cin >> n >> m >> d;
vis.assign(n, vll(m, -1));
adj.assign(n, vector<char>(m));
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
cin >> adj[i][j];
}
}
priority_queue<tuple<ll, ll, ll>,vector<tuple<ll,ll,ll>>,greater<tuple<ll,ll,ll>>> pq;
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
if (adj[i][j] == 'M') {
pq.push({0, i, j});
vis[i][j] = 0;
}
}
}
while (!pq.empty()) {
auto [di, x, y] = pq.top();
pq.pop();
if (di != vis[x][y])continue;
if(di==d)continue;
for (ll k = 0; k < 4; k++) {
ll nx = dx[k] + x, ny = dy[k] + y;
if (nx >= n || nx < 0 || ny >= m || ny < 0)continue;
if (vis[nx][ny] == -1 || vis[nx][ny] > di + 1) {
vis[nx][ny] = di + 1;
pq.push({di + 1, nx, ny});
}
}
}
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
if (adj[i][j] == 'S') {
priority_queue<tuple<ll, ll, ll>,vector<tuple<ll,ll,ll>>,greater<tuple<ll,ll,ll>>> q;
_2vll dist(n, vll(m, LONG_LONG_MAX));
dist[i][j] = 0;
if (vis[i][j] == -1)
q.push({0, i, j});
while (!q.empty()) {
auto [di, x, y] = q.top();
q.pop();
if (di != dist[x][y])continue;
if (adj[x][y] == 'F') {
cout << di << endl;
return;
}
fr0(k, 4) {
ll nx = dx[k] + x, ny = dy[k] + y;
if (nx >= n || nx < 0 || ny >= m || ny < 0 || vis[nx][ny] != -1)continue;
if (dist[nx][ny] > di + 1) {
dist[nx][ny] = di + 1;
q.push({di + 1, nx, ny});
}
}
}
cout << -1 << endl;
}
}
}
}
int main() {
Bustany();
ll t = 1;
// cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbGwKI2RlZmluZSBsZCBsb25nIGRvdWJsZQp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIG11bHRpc2V0PGludD4gbWk7CnR5cGVkZWYgbXVsdGlzZXQ8bGw+IG1sbDsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsbDsKdHlwZWRlZiB2ZWN0b3I8Ym9vbD4gdmI7CnR5cGVkZWYgdmVjdG9yPHN0cmluZz4gdnM7CnR5cGVkZWYgc2V0PGxsPiBzbGw7CnR5cGVkZWYgdmVjdG9yPHZlY3RvcjxpbnQ+PiBfMnZpOwp0eXBlZGVmIHZlY3Rvcjx2ZWN0b3I8bGw+PiBfMnZsbDsKI2RlZmluZSBhbGwodikgKCh2KS5iZWdpbigpKSwgKCh2KS5lbmQoKSkKI2RlZmluZSBzeih2KSAoKGxsKSgodikuc2l6ZSgpKSkKCiNkZWZpbmUgdmlucCh2LCBuKSAgICAgICAgICAgICAgICBcCiAgICBmb3IgKHVsbCBpID0gMDsgaSA8IChuKTsgaSsrKSBcCiAgICBjaW4gPj4gKHYpW2ldCiNkZWZpbmUgcHJpbnR2KHYpICAgICAgXAogICAgZm9yIChhdXRvIGkgOiAodikpIFwKICAgIGNvdXQgPDwgaSA8PCAiICIKI2RlZmluZSBmcjAoaSwgbikgZm9yICh1bGwoaSkgPSAwOyAoaSkgPCAobik7IChpKSsrKQojZGVmaW5lIGZyMShpLCBuKSBmb3IgKHVsbChpKSA9IDE7IChpKSA8IChuKTsgKGkpKyspCiNkZWZpbmUgZnIoaSwgeCwgbikgZm9yICh1bGwoaSkgPSAoeCk7IChpKSA8IChuKTsgKGkpKyspCiNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklORwpjb25zdCBsbCBNT0QgPSAxMDAwMDAwMDA3OwoKdm9pZCBCdXN0YW55KCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgY291dC50aWUoTlVMTCk7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCIuL2luLnR4dCIsICJyIiwgc3RkaW4pLCBmcmVvcGVuKCIuL291dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9CgovL3ZlY3RvcjxzbGw+IGFkaihOKTsKdmVjdG9yPHZlY3RvcjxjaGFyPj4gYWRqOwp2ZWN0b3I8dmVjdG9yPGxsPj4gdmlzOwoKbGwgbiwgbSwgZDsKbGwgZHhbXSA9IHswLCAwLCAxLCAtMX07CmxsIGR5W10gPSB7MSwgLTEsIDAsIDB9OwoKCnZvaWQgc29sdmUoKSB7CiAgICBjaW4gPj4gbiA+PiBtID4+IGQ7CiAgICB2aXMuYXNzaWduKG4sIHZsbChtLCAtMSkpOwogICAgYWRqLmFzc2lnbihuLCB2ZWN0b3I8Y2hhcj4obSkpOwogICAgZm9yIChsbCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGZvciAobGwgaiA9IDA7IGogPCBtOyBqKyspIHsKICAgICAgICAgICAgY2luID4+IGFkaltpXVtqXTsKICAgICAgICB9CiAgICB9CiAgICBwcmlvcml0eV9xdWV1ZTx0dXBsZTxsbCwgbGwsIGxsPix2ZWN0b3I8dHVwbGU8bGwsbGwsbGw+PixncmVhdGVyPHR1cGxlPGxsLGxsLGxsPj4+IHBxOwogICAgZm9yIChsbCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGZvciAobGwgaiA9IDA7IGogPCBtOyBqKyspIHsKICAgICAgICAgICAgaWYgKGFkaltpXVtqXSA9PSAnTScpIHsKICAgICAgICAgICAgICAgIHBxLnB1c2goezAsIGksIGp9KTsKICAgICAgICAgICAgICAgIHZpc1tpXVtqXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICB3aGlsZSAoIXBxLmVtcHR5KCkpIHsKICAgICAgICBhdXRvIFtkaSwgeCwgeV0gPSBwcS50b3AoKTsKICAgICAgICBwcS5wb3AoKTsKICAgICAgICBpZiAoZGkgIT0gdmlzW3hdW3ldKWNvbnRpbnVlOwogICAgICAgIGlmKGRpPT1kKWNvbnRpbnVlOwogICAgICAgIGZvciAobGwgayA9IDA7IGsgPCA0OyBrKyspIHsKICAgICAgICAgICAgbGwgbnggPSBkeFtrXSArIHgsIG55ID0gZHlba10gKyB5OwogICAgICAgICAgICBpZiAobnggPj0gbiB8fCBueCA8IDAgfHwgbnkgPj0gbSB8fCBueSA8IDApY29udGludWU7CiAgICAgICAgICAgIGlmICh2aXNbbnhdW255XSA9PSAtMSB8fCB2aXNbbnhdW255XSA+IGRpICsgMSkgewogICAgICAgICAgICAgICAgdmlzW254XVtueV0gPSBkaSArIDE7CiAgICAgICAgICAgICAgICBwcS5wdXNoKHtkaSArIDEsIG54LCBueX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZm9yIChsbCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGZvciAobGwgaiA9IDA7IGogPCBtOyBqKyspIHsKICAgICAgICAgICAgaWYgKGFkaltpXVtqXSA9PSAnUycpIHsKICAgICAgICAgICAgICAgIHByaW9yaXR5X3F1ZXVlPHR1cGxlPGxsLCBsbCwgbGw+LHZlY3Rvcjx0dXBsZTxsbCxsbCxsbD4+LGdyZWF0ZXI8dHVwbGU8bGwsbGwsbGw+Pj4gcTsKICAgICAgICAgICAgICAgIF8ydmxsIGRpc3QobiwgdmxsKG0sIExPTkdfTE9OR19NQVgpKTsKICAgICAgICAgICAgICAgIGRpc3RbaV1bal0gPSAwOwogICAgICAgICAgICAgICAgaWYgKHZpc1tpXVtqXSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICBxLnB1c2goezAsIGksIGp9KTsKICAgICAgICAgICAgICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgYXV0byBbZGksIHgsIHldID0gcS50b3AoKTsKICAgICAgICAgICAgICAgICAgICBxLnBvcCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChkaSAhPSBkaXN0W3hdW3ldKWNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIGlmIChhZGpbeF1beV0gPT0gJ0YnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgZGkgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmcjAoaywgNCkgewogICAgICAgICAgICAgICAgICAgICAgICBsbCBueCA9IGR4W2tdICsgeCwgbnkgPSBkeVtrXSArIHk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChueCA+PSBuIHx8IG54IDwgMCB8fCBueSA+PSBtIHx8IG55IDwgMCB8fCB2aXNbbnhdW255XSAhPSAtMSljb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RbbnhdW255XSA+IGRpICsgMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdFtueF1bbnldID0gZGkgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5wdXNoKHtkaSArIDEsIG54LCBueX0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY291dCA8PCAtMSA8PCBlbmRsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKfQoKaW50IG1haW4oKSB7CiAgICBCdXN0YW55KCk7CiAgICBsbCB0ID0gMTsKLy8gICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9Cn0=