#include <iostream>
#include <algorithm>
#define MAXN 200
#define ll long long
using namespace std;

int ky[] = {0, 1, 0, -1};
int kx[] = {-1, 0, 1, 0};
int bd[] = {2, 3, 0, 1};

int n, m, sum, g;
char c;
int used[MAXN][MAXN], was[MAXN][MAXN], dir[MAXN][MAXN], op[MAXN][MAXN], num[MAXN][MAXN], timer = 1;


//void rob(int x, int y)
//{
//    used[x][y] = timer;
//    num[x][y]++;
//    if (used[x + kx[dir[x][y]]][y + ky[dir[x][y]]] < timer)
//        rob(x + kx[dir[x][y]], y + ky[dir[x][y]]);
//}

int maxrob = 0, tstart;
//int dfs(int x, int y)
//{
//    //cerr << x << ' ' << y << '\n';
//    int res = 0;
//    used[x][y] = 1;
//    if (used[x + kx[dir[x][y]]][y + ky[dir[x][y]]] == 0)
//    {
//        res = dfs(x + kx[dir[x][y]], y + ky[dir[x][y]]
//    }
//    else
//    if (used[x + kx[dir[x][y]]][y + ky[dir[x][y]]] == 1)
//    {
//        op[x][y]++;
//        used[x + kx[dir[x][y]]][y + ky[dir[x][y]]] = 3;
//        used[x][y] = 2;
//        return true;
//    }
//        if (used[x][y] == 3)
//            return false;
//    used[x][y] = 2;
//    return res;
//}

int cnt(int x, int y)
{
    if (used[x][y])
        return num[x][y];
    used[x][y] = 1;
    num[x][y] += was[x][y];
    for (int i = 0; i < 4; i++)
        if (x + kx[i] >= 0 && x + kx[i] < n && y + ky[i] >= 0 && y + ky[i] < m)
            if (dir[x + kx[i]][y + ky[i]] == bd[i])
                num[x][y] += cnt(x + kx[i], y + ky[i]);
    return num[x][y];
}



int dfs(int x, int y)
{
    used[x][y] = timer++;
    maxrob = max(maxrob, num[x][y]);
    if (used[x + kx[dir[x][y]]][y + ky[dir[x][y]]] == 0)
        return dfs(x + kx[dir[x][y]], y + ky[dir[x][y]]);
    else if (used[x + kx[dir[x][y]]][y + ky[dir[x][y]]] >= tstart)
        return timer - used[x + kx[dir[x][y]]][y + ky[dir[x][y]]];
    return 0;
}


int main()
{
    //cerr << ((int)'a') << ' ' << ((int)'A');
    freopen("robots.in", "r", stdin);
    freopen("robots.out", "w", stdout);
    cin >> n >> m >> g;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            cin >> c;
            if ((int)c < 97)
                was[i][j]++;
            if (c == 'N' || c == 'n')
                dir[i][j] = 0;
            if (c == 'E' || c == 'e')
                dir[i][j] = 1;
            if (c == 'S' || c == 's')
                dir[i][j] = 2;
            if (c == 'W' || c == 'w')
                dir[i][j] = 3;
        }
    for (int i =  0; i < n; i++)
        for (int j = 0; j < m; j++)
            if (!used[i][j])
            {
                cnt(i, j);
            }

    ll res = 0;
    for (int i =  0; i < n; i++)
        for (int j = 0; j < m; j++)
            used[i][j] = 0;
    for (int i =  0; i < n; i++)
        for (int j = 0; j < m; j++)
            if (!used[i][j])
            {
                maxrob = 0;
                tstart = timer;
                res += min(dfs(i, j), maxrob);
            }

//    for (int i =  0; i < n; i++)
//    {
//        for (int j = 0; j < m; j++)
//            cerr << op[i][j] << ' ';
//        cerr << '\n';
//
//
//    }
//    sum = 0;
//    for (int i = 0; i < n; i++)
//        for (int j = 0; j < m; j++)
//            sum += op[i][j];
    cout << res << '\n';
    cerr << res << '\n';
    return 0;
}
