#include <set>
#include <iostream>
#define REP(i,n) for(int i=0; i<(int)(n); i++)

typedef long long ll;

#define IN(x,s,g) ((x) >= (s) && (x) < (g))
#define ISIN(x,y,w,h) (IN((x),0,(w)) && IN((y),0,(h)))

using namespace std;

const int _dx[] = { 0, 1, 0,-1};
const int _dy[] = {-1, 0, 1, 0};
int dir[256];

enum DIR{
  NORTH = 0,
  EAST  = 1,
  SOUTH = 2,
  WEST  = 3
};

string g[100];
int memo[100][100][4];
int h, w;
ll l;
string dir2str = "NESW";


bool cango(int x, int y, int d){
  int xx = x + _dx[d];
  int yy = y + _dy[d];

  return ISIN(xx, yy, w, h) && g[yy][xx] == '.';
}

int main(){
  dir['N'] = NORTH;
  dir['E'] = EAST;
  dir['S'] = SOUTH;
  dir['W'] = WEST;

  while(cin >> h >> w >> l, h + w + l){
    int sx, sy, sd;

    REP(i,h) cin >> g[i];

    REP(i,h) REP(j,w){
      if(g[i][j] != '.' && g[i][j] != '#'){
        sx = j; sy = i; sd = dir[g[i][j]];
        g[i][j] = '.';
      }
      REP(k, 4) memo[i][j][k] = -1;
    }

    for(ll turn = 0; turn < l; turn++){
      // cout << "turn: " << turn << " " << sy + 1 << " " << sx + 1 << " " << dir2str[sd] << endl;

      REP(k, 4){
        if(cango(sx, sy, sd)) break;
        sd = (sd + 1) % 4;
      }

      sx += _dx[sd];
      sy += _dy[sd];

      if(memo[sy][sx][sd] == -1){
        memo[sy][sx][sd] = turn + 1;
      }else{
        int cycle = (turn + 1) - memo[sy][sx][sd];
        ll tmp = (l - (turn + 1)) % cycle +  memo[sy][sx][sd];

        // cout << "tmp: " << tmp << endl;
        // cout << "cycle: " << cycle << endl;

        REP(i,h) REP(j,w) REP(k,4){
          if(memo[i][j][k] == tmp){
            sx = j; sy = i; sd = k;
            goto end;
          }
        }
      end:;
        break;
      }
    }

    cout << sy + 1 << " " << sx + 1 << " " << dir2str[sd] << endl;
  }

  return 0;
}