#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <cfloat>
#include <stack>
#include <queue>
#include <vector>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define MOD 1000000007
#define EPS 0.000000001
using namespace std;

enum DIR{
	North,
	East,
	West,
	South,
};

int H,W;

ll Limit,visit_Time[100][100][4];

DIR turn(DIR dir){
	switch(dir){
	case North:
		return East;
	case East:
		return South;
	case West:
		return North;
	case South:
		return West;
	}
	return North; //must not reach here
}

bool rangeCheck(int row,int col){
	if(row >= 0 && row <= H-1 && col >= 0 && col <= W-1){
		return true;
	}else{
		return false;
	}
}

void func(){

	for(int row = 0; row < H; row++){
		for(int col = 0; col < W; col++){
			for(int i = 0; i < 4; i++)visit_Time[row][col][i] = -1;
		}
	}

	int row,col,first_row,first_col;
	DIR dir,pre_dir,first_dir;

	char map[H][W+1];
	for(int i = 0; i < H; i++){
		scanf("%s",map[i]);
		for(int k = 0; k < W; k++){
			switch(map[i][k]){
			case 'N':
				dir = North;
				first_dir = North;
				row = i;
				col = k;
				first_row = i;
				first_col = k;
				break;
			case 'E':
				dir = East;
				first_dir = East;
				row = i;
				col = k;
				first_row = i;
				first_col = k;
				break;
			case 'W':
				dir = West;
				first_dir = West;
				row = i;
				col = k;
				first_row = i;
				first_col = k;
				break;
			case 'S':
				dir = South;
				first_dir = South;
				row = i;
				col = k;
				first_row = i;
				first_col = k;
				break;
			}
		}
	}

	visit_Time[row][col][dir] = 0;

	ll loop_in_time,loop_cicle;
	int next_row,next_col,start_row,start_col;
	DIR start_dir;

	while(true){

		switch(dir){
		case North:
			next_row = row-1;
			next_col = col;
			break;
		case East:
			next_row = row;
			next_col = col+1;
			break;
		case West:
			next_row = row;
			next_col = col-1;
			break;
		case South:
			next_row = row+1;
			next_col = col;
			break;
		}

		if(rangeCheck(next_row,next_col) == false || map[next_row][next_col] == '#'){
			pre_dir = dir;
			dir = turn(dir);
			if(visit_Time[row][col][dir] == -1){
				visit_Time[row][col][dir] = visit_Time[row][col][pre_dir];
			}else{
				start_row = row;
				start_col = col;
				start_dir = pre_dir;

				loop_in_time = visit_Time[row][col][dir];
				loop_cicle = visit_Time[row][col][pre_dir]-visit_Time[row][col][dir];
				break;
			}
		}else{
			if(visit_Time[next_row][next_col][dir] == -1){
				visit_Time[next_row][next_col][dir] = visit_Time[row][col][dir]+1;
				row = next_row;
				col = next_col;
			}else{
				start_row = next_row;
				start_col = next_col;
				start_dir = dir;

				loop_in_time = visit_Time[next_row][next_col][dir];
				loop_cicle = visit_Time[row][col][dir]+1-visit_Time[next_row][next_col][dir];
				break;
			}

		}
	}

	if(Limit < loop_in_time){
		row = first_row;
		col = first_col;
		dir = first_dir;
	}else{
		Limit -= loop_in_time;
		Limit %= loop_cicle;

		row = start_row;
		col = start_col;
		dir = start_dir;
	}

	while(Limit > 0){

		switch(dir){
		case North:
			next_row = row-1;
			next_col = col;
			break;
		case East:
			next_row = row;
			next_col = col+1;
			break;
		case West:
			next_row = row;
			next_col = col-1;
			break;
		case South:
			next_row = row+1;
			next_col = col;
			break;
		}

		if(rangeCheck(next_row,next_col) == false || map[next_row][next_col] == '#'){
			dir = turn(dir);
		}else{
			row = next_row;
			col = next_col;
			Limit--;
		}
	}

	printf("%d %d ",row+1,col+1);
	switch(dir){
	case North:
		printf("N\n");
		break;
	case East:
		printf("E\n");
		break;
	case West:
		printf("W\n");
		break;
	case South:
		printf("S\n");
		break;
	}

}


int main(){

	while(true){
		scanf("%d %d %lld",&H,&W,&Limit);
		if(H == 0 && W == 0 && Limit == 0)break;

		func();
	}

	return 0;
}

Measured memory_bytes: 2952