#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <numeric>
#include <math.h>
#include <algorithm>
#include <functional>
#include <string>
#include <array>
#include <vector>
#include <list>
#include <stack>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <deque>
#include <queue>
#include <complex>
#define full(c) c.begin(), c.end()
#define vector2d(name,type,h,w,init) vector<vector<type>> name(h,vector<type>(w,init)) 
const int PRIME = 1000000007;
const int INT_INF = 2147483647;
const long long int LL_INF = 9223372036854775807;
const double PI = acos(-1);
const double EPS = 0.000000001;
typedef unsigned long long int ull;
typedef long long int ll;
using namespace std;

int main() {
	const int dx[4] = { 0,1,0,-1 };
	const int dy[4] = { -1,0,1,0 };
	while (1) {
		ll h, w, l;
		cin >> h >> w >> l;
		if (h == 0 && w == 0 && l == 0) break;
		ll i, j, k, d, x, y, detect[100][100][4];
		vector2d(f, char, h, w, 0);
		for (i = 0; i < h; i++) {
			for (j = 0; j < w; j++) {
				for (k = 0; k < 4; k++) {
					detect[i][j][k] = -1;
				}
			}
		}
		for (i = 0; i < h; i++) {
			string tmp;
			cin >> tmp;
			for (j = 0; j < w; j++) {
				f[i][j] = tmp[j];
				if (f[i][j] == 'N') y = i, x = j, d = 0;
				if (f[i][j] == 'E') y = i, x = j, d = 1;
				if (f[i][j] == 'S') y = i, x = j, d = 2;
				if (f[i][j] == 'W') y = i, x = j, d = 3;
			}
		}
		while (l > 0) {
			if (detect[y][x][d] != -1) {
				ll dif = detect[y][x][d] - l;
				l %= dif;
				if (l == 0) l += dif;
			}
			detect[y][x][d] = l;
			ll nx = x + dx[d], ny = y + dy[d];
			if (nx < 0 || w <= nx || ny < 0 || h <= ny || f[ny][nx] == '#') {
				d = (d + 1) % 4;
			}
			else {
				x = nx;
				y = ny;
				l--;
			}
		}
		cout << y + 1 << " " << x + 1 << " ";
		if (d == 0) cout << "N" << endl;
		if (d == 1) cout << "E" << endl;
		if (d == 2) cout << "S" << endl;
		if (d == 3) cout << "W" << endl;
	}
	return 0;
}



