#include <cassert>
#include <cstdio>
#include <cstring>

#include <algorithm>

using namespace std;

int dh[4] = {1, 0, -1, 0};
int dw[4] = {0, 1, 0, -1};
char ds[] = "SENW";

int main() {
  assert(freopen("travel.in", "r", stdin));
  assert(freopen("travel.out", "w", stdout));

  int w, h, n;
  assert(scanf("%d%d%d", &w, &h, &n) == 3);
  char map[h][w];
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++)
      assert(scanf(" %c", &map[i][j]) == 1);

  int vh = -1, vw = -1;
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++) {
      if (map[i][j] == 'V') { // V for Veniamin. Remember, remember…
        vh = i, vw = j;
      }
    }

  int d[h][w], r[h][w];
  memset(d, 0x7f, sizeof(d));
  // dbfs: depth-breadth-first search
  int qh[w * h * 2], qw[w * h * 2];
  int ql = w * h, qr = w * h;
  r[vh][vw] = -1;
  d[vh][vw] = 0;
  qh[qr] = vh;
  qw[qr] = vw;
  qr++;
  while (ql < qr) {
    int uh = qh[ql];
    int uw = qw[ql];
    ql++;
    for (int i = 0; i < 4; i++) {
      int vh = uh + dh[i];
      int vw = uw + dw[i];
      if (vh < 0 || vh >= h || vw < 0 || vw >= w)
        continue;
      if (d[vh][vw] != 0x7f7f7f7f)
        continue;
      r[vh][vw] = i;
      if (map[vh][vw] == 'T') {
        d[vh][vw] = d[uh][uw];
        ql--;
        qh[ql] = vh;
        qw[ql] = vw;
      } else {
        d[vh][vw] = d[uh][uw] + 1;
        qh[qr] = vh;
        qw[qr] = vw;
        qr++;
      }
    }
  }

  int b[h][w];
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++) {
      b[i][j] = 0;
      if (map[i][j] != 'T')
        continue;
      b[i][j]++;
      for (int t = 0; t < 4; t++) {
        int th = i + dh[t];
        int tw = j + dw[t];
        if (th < 0 || th >= h || tw < 0 || tw >= w)
          continue;
        if (map[th][tw] == 'T')
          b[i][j]++;
      }
    }

  int ans = (int)1e9;
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++) {
      if (b[i][j] == 0)
        continue;
      if (b[i][j] == 1)
        ans = min(ans, abs(i - vh) + abs(j - vw) + 2 * (n - 1));
      else
        ans = min(ans, d[i][j] + n);
    }
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++) {
      if (b[i][j] == 0)
        continue;
      if (b[i][j] == 1 && ans == abs(i - vh) + abs(j - vw) + 2 * (n - 1)) {
        char r = '?', f = '?';
        while (vh < i) {
          putc(f = 'S', stdout);
          r = 'N';
          vh++;
        }
        while (vh > i) {
          putc(f = 'N', stdout);
          r = 'S';
          vh--;
        }
        while (vw < j) {
          putc(f = 'E', stdout);
          r = 'W';
          vw++;
        }
        while (vw > j) {
          putc(f = 'W', stdout);
          r = 'E';
          vw--;
        }
        for (int t = 1; t < n; t++) {
          putc(r, stdout);
          putc(f, stdout);
        }
        puts("");
        return 0;
      }
      if (b[i][j] > 1 && ans == d[i][j] + n) {
        int path[w + h + 2 * n];
        int k = 0;
        int th = i, tw = j;
        while (r[th][tw] != -1) {
          int rr = r[th][tw];
          path[k++] = rr;
          th -= dh[rr];
          tw -= dw[rr];
        }
        for (int t = k - 1; t >= 0 && n > 0; t--) {
          putc(ds[path[t]], stdout);
          vh += dh[path[t]];
          vw += dw[path[t]];
          if (map[vh][vw] == 'T')
            n--;
        }
        while (n > 0) {
          for (int t = 0; t < 4; t++) {
            int th = vh + dh[t];
            int tw = vw + dw[t];
            if (th < 0 || th >= h || tw < 0 || tw >= w)
              continue;
            if (map[th][tw] == 'T') {
              putc(ds[t], stdout);
              vh = th, vw = tw;
              n--;
              break;
            }
          }
        }
        puts("");
        return 0;
      }
    }

  return 1;
}

