using System;

public class P
{
    public int x { get; set; }
    public int y { get; set; }
    public int step { get; set; }
    public int d { get; set; }
}

public class hello
{
    public static int h, w, sx, sy, sd;
    public static long L;
    public static int[] dx, dy;
    public static char[] dir;
    public static void Main()
    {
         dx = new int[] { 0, 1, 0, -1 };
         dy = new int[] { 1, 0, -1, 0 };
        dir = new char[] { 'E', 'S', 'W', 'N' };
        while (true)
        {
            string[] line = Console.ReadLine().Trim().Split(' ');
            h = int.Parse(line[0]);
            w = int.Parse(line[1]);
            L = long.Parse(line[2]);
            if (h == 0 && w == 0 && L == 0) break;
            var map = new bool[h, w];
            var map2 = new int[h, w, 4];
            for (int i = 0; i < h; i++)
                for (int j = 0; j < w; j++)
                    for (int k = 0; k < 4; k++) map2[i, j, k] = -1;
            sx = -1; sy = -1; sd = -1;
            for (int i = 0; i < h; i++)
            {
                var s = Console.ReadLine().Trim();
                for (int j = 0; j < w; j++)
                {
                    if (s[j] == '#') map[i, j] = false;
                    else
                    {
                        map[i, j] = true;
                        if (s[j] != '.')
                        {
                            sx = i;
                            sy = j;
                            if (s[j] == 'E') sd = 0;
                            else if (s[j] == 'S') sd = 1;
                            else if (s[j] == 'W') sd = 2;
                            else sd = 3;
                        }
                    }
                }
            }
            getAns(map, map2);
        }
    }
    static void getAns2(bool[,] map, int prestep, P t)
    {
        var nstep = (L - t.step) % (t.step - prestep);
        if (nstep == 0) { Console.WriteLine("{0} {1} {2}", t.x + 1, t.y + 1, dir[t.d]); return; }
        t.step = 0;
        while (true)
        {
            if (t.step == nstep)
            {
                Console.WriteLine("{0} {1} {2}", t.x + 1, t.y + 1, dir[t.d]);
                break;
            }
            var nd = t.d;
            while (true)
            {
                var nx = t.x + dx[nd];
                var ny = t.y + dy[nd];
                if (nx >= 0 && nx < h && ny >= 0 && ny < w && map[nx, ny])
                {
                    t.x = nx;
                    t.y = ny;
                    t.d = nd;
                    t.step++;
                    break;
                }
                else
                {
                    nd++;
                    if (nd == 4) nd = 0;
                }
            }
        }
    }
    static void getAns(bool[,] map, int[,,] map2)
    {
        var t = new P { x = sx, y = sy, d = sd, step = 0 };
        while (true)
        {
            if (t.step == L) { Console.WriteLine("{0} {1} {2}", t.x + 1, t.y + 1, dir[t.d]); return; }
            var mp2 = map2[t.x, t.y, t.d];
            if (mp2 != -1) { getAns2(map, mp2, t); return; }
            map2[t.x, t.y, t.d] = t.step;
            var nd = t.d;
            var nstep = t.step + 1;
            while (true)
            {
                var nx = t.x + dx[nd];
                var ny = t.y + dy[nd];
                if (nx >= 0 && nx < h && ny >= 0 && ny < w && map[nx, ny])
                {
                    t.x = nx;
                    t.y = ny;
                    t.d = nd;
                    t.step = nstep;
                    break;
                }
                else
                {
                    nd++;
                    if (nd == 4) nd = 0;
                }
            }
        }
    }
}



Measured memory_bytes: 16504