const qx:array[1..4] of longint=(0,-1,0,1);
qy:array[1..4] of longint=(1,0,-1,0); 前的坐标
zx:array[1..4] of longint=(-1,0,1,0);
zy:array[1..4] of longint=(0,-1,0,1); 左
yx:array[1..4] of longint=(1,0,-1,0);
yy:array[1..4] of longint=(0,1,0,-1); 右
hx:array[1..4] of longint=(0,1,0,-1);
hy:array[1..4] of longint=(-1,0,1,0); 后
z1:array[1..4] of longint=(2,3,4,1); 方向
y1:array[1..4] of longint=(4,1,2,3);
h1:array[1..4] of longint=(3,4,1,2);
var a:array[0..101,0..101] of char;
f:array[0..101,0..101,1..4] of longint;
n,m,ans,v,x,y,l,r,i,j,k:longint;
procedure try(x,y,v,fx:longint);
begin
if (f[x,y,fx]>v) and (f[x,y,fx]>=0) then exit;
if v<0 then v:=0;
f[x,y,fx]:=v;
if a[x+qx[fx],y+qy[fx]]<>'.' then try(x+qx[fx],y+qy[fx],v+1,fx)
else begin
if a[x+zx[fx],y+zy[fx]]<>'.' then try(x,y,v-35,z1[fx]);
if a[x+yx[fx],y+yy[fx]]<>'.' then try(x,y,v-40,y1[fx]);
if (a[x+hx[fx],y+hy[fx]]<>'.') and (a[x+zx[fx],y+zy[fx]]='.') and (a[x+yx[fx],y+yy[fx]]='.') then try(x,y,0,h1[fx]);
end;
end;
begin
readln(n,m,v);
fillchar(f,sizeof(f),0);
for i:=0 to n+1 do
for j:=0 to m+1 do
begin
a[i,j]:='.';
for k:=1 to 4 do
f[i,j,k]:=-1;
end;
for i:=1 to n do
begin
for j:=1 to m do
begin
read(a[i,j]);
if a[i,j]='F' then begin
x:=i;
y:=j;
end;
if (a[i,j]<>'.') and (a[i,j]<>'#') and (a[i,j]<>'F') then begin
l:=i;
r:=j;
end;
end;
readln;
end;
if a[l,r]='E' then try(l,r,v,1);
if a[l,r]='W' then try(l,r,v,3);
if a[l,r]='N' then try(l,r,v,2);
if a[l,r]='S' then try(l,r,v,4);
ans:=0;
for i:=1 to 4 do
if f[x,y,i]>ans then ans:=f[x,y,i];
writeln(ans);
end.