#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(){
	int H,W; // マップの縦幅、横幅
	long long L; // この数だけ進んだ後の場所を知りたい
	// intは21億まで,long longは920京まで
	char c[111][111]; // マップ。y座標(上から下が正)が先、x座標(左から右が正)が後
	// なお、このようなプログラムでは数学と違い、縦方向のy座標を先に書くのが普通
	
	char dir[] = "ESWN"; // 東南西北 (右回り)
	// 以下、向きを数字で表す。東=0,南=1,西=2,北=3
	int dy[] = {0,1,0,-1};
	int dx[] = {1,0,-1,0};
	// dy[0]=0, dx[0]=1 の意味:
	// 東(0)に進むとは、y座標を0、x座標を1増やすこと。
	
	int memo[111][111][4];
	// 例: memo[6][4][1] = 3 なら、
	// スタートから3歩進んだとき、y=6,x=4の位置にいて、南(1)を向いていた
	// memo[6][4][1] = -1 なら、
	// y=6,x=4の位置で南(1)を向いていたことがまだない
	
	int y,x,d,step; // ロボットの現在地(y,x)、向き(d)、スタートからの歩数(step)
	int i,j,k; // for文用
	
	// 実際の処理はここから
	
	while(1){ // データセット終了の印が来るまで処理を続ける
		scanf("%d %d %lld",&H,&W,&L); // Lはlong longなので%lldを使う
		if(H==0)return 0; // Hが0なら、他も全部0のはずなのでプログラム終了
		
		// 入力は c[1〜H][1〜W] の範囲に読み込む。
		// その前に、この範囲と周囲1マス (c[0〜H+1][0〜W+1]) を壁で埋める。目的は2つ
		// 1. 迷路から出られなくすることで、「迷路を出てはいけない」という条件を無視する
		// 2. 前回読み込んだマップの影響を受けないようにする
		for(i=0;i<=H+1;i++){
			for(j=0;j<=W+1;j++){
				c[i][j]='#';
			}
		}
		
		// 入力を読み込む
		for(i=1;i<=H;i++){
			for(j=1;j<=W;j++){
				scanf(" %c",&c[i][j]);
				// " %c"で空白を読み飛ばし、前の行の終わりの改行文字を無視する
				// (詳細… http://www9.plala.or.jp/sgwr-t/c/sec05.html の「５−４」)
				if(isalpha(c[i][j])){
				// c[i][j]はアルファベットか？
				// 使うにはプログラム先頭に"#include <ctype.h>"
					y=i,x=j; // アルファベットなら、そこがロボットの場所
					for(k=0;k<4;k++){ // その文字はESWNのどれか？
						if(dir[k]==c[i][j]) d=k; // ロボットの向き
					}
					c[i][j]='.'; // 方向を読み取った後は空白にしておく
				}
			}
		}
		
		// テスト出力
		/*for(i=0;i<=H+1;i++){
			for(j=0;j<=W+1;j++){
				printf("%c",c[i][j]);
			}
			printf("\n");
		}*/
		//printf("%d %d %d\n",y,x,d);
		
		memset(memo,-1,sizeof(memo));
		// memset(○○,-1,sizeof(○○)) で配列○○の中身を全て-1に(多次元配列もOK)
		// 使うにはプログラム先頭に"#include <string.h>" (※-1と0以外では使い方が難しい)
		// -1は、その状態にまだなったことがないという印として使う
		
		step=0; // 現在の歩数を0に
		
		while(1){ // 目的の歩数に達するか、ループするまで続ける
			
			int ny,nx; // 進む先の座標
			//printf("%d %d %c\n",y,x,dir[d]); // テスト出力
			
			if(step == L){ // 目的の歩数に達した
				printf("%d %d %c\n",y,x,dir[d]); // 現在の状況を出力
				break; // 終了
			}
			
			if(memo[y][x][d] != -1){ // ループに入った
				// 116行目(★)で、一歩ごとにメモをとっている。
				// もし過去に同じ場所で同じ方向を向いていたことがあった(=ループに入った)
				// なら、memo[y][x][d]にその時点での歩数が入っていて、-1ではない
				long long cycle = step - memo[y][x][d];
				// 現在の歩数 - 過去に同じ状態だったときの歩数 = ループの長さ
				long long rest = (L - step) % cycle;
				// 目的の歩数までの残り歩数を、ループの長さで割った余りだけ歩いて終了
				
				//printf("LOOP\n"); // テスト出力
				for(i=0;i<rest;i++){ // 上で計算した歩数だけ歩く
					ny = y + dy[d]; // 目の前のマスのy座標
					nx = x + dx[d]; // 同x座標
					while(c[ny][nx] == '#'){
					// もし目の前が壁なら、目の前が壁でなくなるまで右を向き続ける
						d = (d+1) % 4; // 90度右を向く(東=0,南=1,西=2,北=3)
						ny = y + dy[d]; // 目の前のマスのy座標
						nx = x + dx[d]; // x座標
					}
					y=ny,x=nx; // 目の前は壁ではない。実際に進む
				}
				
				printf("%d %d %c\n",y,x,dir[d]); // 歩き終わったので、現在の状況を出力
				break; // 終了
			}
			
			// ここまで来た場合、上のif文は実行されなかった
			// つまり、今の場所で今向いている方向を向くのは初めてで、ループに入っていない
			memo[y][x][d] = step; // (★) 今の状態(y,x,d)に、現時点での歩数(step)を記録
			
			// 上のif文の内部と全く同様に、目の前が壁でなくなるまで右を向き、進む
			ny = y + dy[d];
			nx = x + dx[d];
			while(c[ny][nx] == '#'){
				d = (d+1) % 4;
				ny = y + dy[d];
				nx = x + dx[d];
			}
			y=ny,x=nx;
			step++;
		}
	}
	
	return 0;
}

Measured memory_bytes: 812