#include <stdio.h>
#include <limits.h>
#include <math.h>
#include <bitset>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cstring>
#include <string>
#include <sstream>
#include <algorithm>
#include <iomanip>
#include <iostream>

#define VARIABLE(x) cerr << #x << "=" << x << endl
#define BINARY(x) static_cast<bitset<16> >(x);
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define REP(i,m,n) for (int i=m;i<(int)(n);i++)
#define if_range(x, y, w, h) if (0<=(int)(x) && (int)(x)<(int)(w) && 0<=(int)(y) && (int)(y)<(int)(h))

const int INF = 100000000;
typedef double D;
const double EPS = 1e-8;
const double PI = 3.14159;
//int dx[4]={-1, 0, 1, 0}, dy[4]={0, -1, 0, 1};
using namespace std;
typedef pair<int, int> P;

/** Problem2320 : Infinity Maze **/
typedef long long int ll;
ll dd[100][100][4];
char board[100][100];
int H, W;
ll L;
const int dx[4] = {0, 1, 0, -1}, dy[4] = {-1, 0, 1, 0};

int main()
{
	string label = "NESW";
	
	while (cin>>H>>W>>L, H||W||L) {
		int d, sx, sy;
		memset(dd, -1, sizeof(dd));
		
		rep(y, H) {
			rep(x, W) {
				char c; cin>>c;
				board[x][y] = c;

				if (c!='.' && c!= '#') {
					if (c=='N') {
						d = 0;
					} else if (c=='E') {
						d = 1;
					} else if (c=='S') {
						d = 2;
					} else if (c=='W') {
						d = 3;
					}
					sx = x; sy = y;
				}
			}
		}
		
		dd[sx][sy][d] = 0;
		
		ll t=0; bool find=false; int ansd;
		while (L>0) {
			int nx = sx+dx[d], ny = sy+dy[d];
			
			if (0<=nx && nx<W && 0<=ny && ny<H && board[nx][ny]!='#') {
				if (!find && dd[nx][ny][d]>=0) {
					L %= (t+1 - dd[nx][ny][d]);
					find = true;
				} else {
					sx = nx; sy = ny;
					L--; t++;
					dd[sx][sy][d] = t;
					ansd = d;
				}
			} else {
				d++; d%=4;
			}
		}
		
		cout << sy+1 << " " << sx+1 << " " << label[ansd] << endl;
	}
}