#include <bits/stdc++.h>

using namespace std;

struct State {
  int x, y, d;
  long long l;
  State(){}
  State(int x, int y, int d, long long l):x(x), y(y), d(d), l(l){}
};
  
int H, W;
long long L;
int sx, sy, sd;
char maze[101][101];

int dist[4][101][101];

const string dir = "NESW";

const int dx[] = {0, 1, 0, -1};
const int dy[] = {-1, 0, 1, 0};

State bfs()
{
  queue<State> que; que.push(State(sx, sy, sd, L));
  memset(dist, -1, sizeof(dist));
  dist[sd][sy][sx] = 0;
  while(!que.empty()) {
    State p = que.front(); que.pop();
    if(p.l == 0LL) return p;    
    int nx = p.x+dx[p.d], ny = p.y+dy[p.d];
    long long nl = p.l;
    if(0 <= nx && nx < W && 0 <= ny && ny < H && maze[ny][nx] != '#') {
      nl--;
      if(dist[p.d][ny][nx] != -1) {
	nl %= (dist[p.d][p.y][p.x]+1 - dist[p.d][ny][nx]);
	memset(dist, -1, sizeof(dist));
      }
      dist[p.d][ny][nx] = dist[p.d][p.y][p.x] + 1;
      que.push(State(nx, ny, p.d, nl));
    } else {
      dist[(p.d+1)%4][p.y][p.x] = dist[p.d][p.y][p.x];
      que.push(State(p.x, p.y, (p.d+1)%4, nl));
    }
  }
}

int main()
{
  while(cin >> H >> W >> L, H) {
    memset(maze, 0, sizeof(maze));
    for(int i = 0; i < H; i++) {
      for(int j = 0; j < W; j++) {
	cin >> maze[i][j];
	if(dir.find(maze[i][j]) != string::npos) {
	  sy = i, sx = j, sd = dir.find(maze[i][j]);
	}
      }
    }
    State s = bfs();
    cout << s.y+1 << " " << s.x+1 << " " << dir[s.d] << endl;
  }
  return 0;
}