#include <iostream>
#include <algorithm>
#include <cstdio>
#include <set>
#include <vector>
#include <map>
#define ALL(x) x.begin(),x.end()


//bool vis[1002][1002];

using namespace std;
int n,m;
vector<string> v;
int mas[1002][1002];
pair<int, int> snm[1002][1002];
int kolvo[1002][1002];
int sz[1002][1002];
pair<int,int> get_snm(int r, int s) {
    if (snm[r][s] == make_pair(r,s)) return snm[r][s];
    return snm[r][s] = get_snm(snm[r][s].first,snm[r][s].second);
}


int get_cycle(int i, int j) {
    int ans=1;
    int si=i,sj=j;
    int r=i,s=j;
l:
        if (v[r][s] == 'w') s--; else //snm[r][s] = get_snm(r,s-1);
        if (v[r][s] == 'W') s--; else //snm[r][s] = get_snm(r,s-1);
        if (v[r][s] == 'e') s++; else //snm[r][s] = get_snm(r,s+1);
        if (v[r][s] == 'E') s++; else //snm[r][s] = get_snm(r,s+1);
        if (v[r][s] == 'n') r--; else //snm[r][s] = get_snm(r-1,s);
        if (v[r][s] == 'N') r--; else //snm[r][s] = get_snm(r-1,s);
        if (v[r][s] == 's') r++; else //snm[r][s] = get_snm(r+1,s);
        if (v[r][s] == 'S') r++;
    if (si==r && sj == s) return ans+1; else ans++;
    goto l;

}

void get(int r, int s) {
  //  cout<<":::::"<<r<<" "<<s<<endl;
    vector<pair<int,int> > way;
    int az = 0;
    while (mas[r][s] == -1) {
        way.push_back(make_pair(r,s));
        az+=kolvo[r][s];//v[r][s]>='A' && v[r][s]<='Z';
        mas[r][s] =1;

        if (v[r][s] == 'w') snm[r][s] = make_pair(r,s-1); else //snm[r][s] = get_snm(r,s-1);
        if (v[r][s] == 'W') snm[r][s] = make_pair(r,s-1); else //snm[r][s] = get_snm(r,s-1);
        if (v[r][s] == 'e') snm[r][s] = make_pair(r,s+1); else //snm[r][s] = get_snm(r,s+1);
        if (v[r][s] == 'E') snm[r][s] = make_pair(r,s+1); else //snm[r][s] = get_snm(r,s+1);
        if (v[r][s] == 'n') snm[r][s] = make_pair(r-1,s); else //snm[r][s] = get_snm(r-1,s);
        if (v[r][s] == 'N') snm[r][s] = make_pair(r-1,s); else //snm[r][s] = get_snm(r-1,s);
        if (v[r][s] == 's') snm[r][s] = make_pair(r+1,s); else //snm[r][s] = get_snm(r+1,s);
        if (v[r][s] == 'S') snm[r][s] = make_pair(r+1,s);
        fflush(stdin);


        if (v[r][s] == 'w') s--; else //snm[r][s] = get_snm(r,s-1);
        if (v[r][s] == 'W') s--; else //snm[r][s] = get_snm(r,s-1);
        if (v[r][s] == 'e') s++; else //snm[r][s] = get_snm(r,s+1);
        if (v[r][s] == 'E') s++; else //snm[r][s] = get_snm(r,s+1);
        if (v[r][s] == 'n') r--; else //snm[r][s] = get_snm(r-1,s);
        if (v[r][s] == 'N') r--; else //snm[r][s] = get_snm(r-1,s);
        if (v[r][s] == 's') r++; else //snm[r][s] = get_snm(r+1,s);
        if (v[r][s] == 'S') r++;//snm[r][s] = get_snm(r+1,s);
        //kolvo[snm[r][s].first][snm[r][s].second] += kolvo[r][s];

        //cout<<"!"<<r<<" "<<s<<endl;
    }
    for (int i=0;i<way.size();i++) {
        if (way[i] == make_pair(r,s)) {snm[r][s] = make_pair(r,s);break;}
        if (i==way.size()-1) snm[r][s] = get_snm(r,s);
    }

    //snm[r][s] = get_snm(r,s);
   // cout<<snm[r][s].first<<" "<<snm[r][s].second<<endl;
    kolvo[snm[r][s].first][snm[r][s].second] += az;
    sz[snm[r][s].first][snm[r][s].second] += way.size();
    return;
/*
    mas[r][s] = 0;
    int sum = 0;
    switch(v[r][s]) {
    case 'w':
        s--;
        break;
    case 'n':
        r--;
        break;
    case 'e':
        s++;
        break;
    case 's':
        r++;
        break;
    case 'W':
        sum++;
        s--;
        break;
    case 'N':
        sum++;
        r--;
        break;
    case 'E':
        sum++;
        s++;
        break;
    case 'S':
        sum++;
        r++;
        break;
    }
    while (mas[r][])
*/

}

void print(pair<int,int> p) {
    cout<<p.first<<" "<<p.second<<endl;
}

int main () {
    int g;

    for (int i=0;i<1002;i++)
        for (int j=0;j<1002;j++) mas[i][j] = -1,snm[i][j] = make_pair(i,j),kolvo[i][j] =0,sz[i][j] = 0 ;
    freopen("robots.in","r",stdin);
    freopen("robots.out","w",stdout);
    cin>>n>>m>>g;
    v.resize(n+2);
    for (int i=0;i<=m+3;i++) v[0]+='.';
    v.back()  = v[0];
    for (int i=0;i<n;i++) {

        cin>>v[i+1];
        v[i+1].insert(v[i+1].begin(),'.');
        v[i+1]+='.';
    }
   // for (int i=0;i<v.size();i++) cout<<v[i]<<endl;
    for (int i=0;i<n+2;i++) {
        for (int j=0;j<m+2;j++) kolvo[i][j] = (v[i][j]>='A' && v[i][j]<='Z');
    }
      //  for (int i=1;i<=n;i++) {
    //    for (int j=1;j<=m;j++) cout<<kolvo[i][j]<<" ";
   //     cout<<endl;
  //  }

    for (int i=1;i<=n;i++)
    for (int j=1;j<=m;j++) {
       if (mas[i][j] == -1) get(i,j);

/*
        for (int i=1;i<=n;i++) {
        for (int j=1;j<=m;j++) cout<<kolvo[i][j]<<" ";
        cout<<endl;
    }cout<<endl;

            for (int i=1;i<=n;i++) {
        for (int j=1;j<=m;j++) cout<<mas[i][j]<<" ";
        cout<<endl;
    }cout<<endl;

*/
    }
   // cout<<">>>>>>"<<endl;
    set<pair<int,int> > s;
    int ans=0;
   /* for (int i=1;i<=n;i++) {
        for (int j=1;j<=m;j++){
            pair<int,int> parent = get_snm(i,j);
            if (s.count(parent) == 0) {
                ans+=kolvo[parent.first][parent.second];
                s.insert(parent);







            }
        }
    }*/
    for (int i=1;i<=n;i++) {
      //  for (int j=1;j<=m;j++) cout<<kolvo[i][j]<<" ";
        cout<<endl;
    }
    for (int i=1;i<=n;i++) {
        for (int j=1;j<=m;j++) if (snm[i][j] == make_pair(i,j)) {
            ans+=min(kolvo[i][j]-(v[i][j]>='A'&&v[i][j]<='Z'),get_cycle(i,j)-1);
        }
    }
   // for (int i=1;i<=n;i++) {
    //    for (int j=1;j<=m;j++) print(snm[i][j]);
     //   cout<<"!!!!!!"<<endl;
   // }
    cout<<endl<<max(0,ans);
   //cout<<endl<<get_cycle(2,2);
    return 0;
 }
