#include<bits/stdc++.h>
#define r read()
#define bb printf("!!\n");
#define cc printf("\n");
using namespace std;
inline int read()
{
bool ok=0 ;int res=0;char c;
while(((c=getchar())<'0'||c>'9')&&c!='-');
if(c=='-') ok=1;else res=c-48;
while((c=getchar())>='0'&&c<='9')res=(res<<3)+(res<<1)+(c-48);
return ok ? ~res + 1:res;
}
const int N=1e5+100;
int h[N],net[N],go[N],val[N],ecnt=1;
void add(int u,int v,int w){go[++ecnt]=v;val[ecnt]=w;net[ecnt]=h[u];h[u]=ecnt;}
int s,t,n,m;int vis[N];
int g[110][110];
int id[110][110];
int dis(int a,int b,int c,int d)
{
return ((a-c)*(a-c)+(b-d)*(b-d));
}
int dfs(int u)
{
if(u==t)return 1;
vis[u]=1;
for(int e=h[u];e;e=net[e])
{
int v=go[e];
if(vis[v]||val[e]==0)continue;
if(dfs(v))
{
val[e]--;
val[e^1]++;
return 1;
}
}
return 0;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("cin.txt","r",stdin);
#endif
int d;
n=r;m=r;d=r;
s=2*n*m+1;
t=2*n*m+2;
int cnt=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
id[i][j]=cnt;
cnt++;
}
}
cnt=n*m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%1d",&g[i][j]);
if(g[i][j])
{
add(id[i][j]+cnt,id[i][j],g[i][j]);
add(id[i][j],id[i][j]+cnt,0);
for(int k1=0;k1<=n+1;k1++)
{
for(int k2=0;k2<=m+1;k2++)
{
if(k1==i&&k2==j)continue;
if(d*d>=dis(k1,k2,i,j))
{
if(id[k1][k2])
{
add(id[i][j],id[k1][k2]+cnt,1e9);
add(id[k1][k2]+cnt,id[i][j],0);
}else
{
add(id[i][j],t,1e9);
add(t,id[i][j],0);
}
}
}
}
}
}
}
int tot=0;
char op;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%c",&op);
while(op==10)scanf("%c",&op);
if(op=='L')
{
add(s,id[i][j]+cnt,1),add(id[i][j]+cnt,s,0),tot++;
}
}
}
int res=0,ans=0;
while((res=dfs(s))>0)
{
ans+=res;
memset(vis,0,sizeof(vis));
}
printf("%d\n",tot-ans);
return 0;
}