#include<bits/stdc++.h>
using namespace std;
string s;
int n,m,l,ans=0,vis[105][105],fx[9][2]={{0,0},{-1,0},{0,-1},{1,0},{0,1},{-1,-1},{1,-1},{1,1},{-1,1}};
char a[105][105];
void dfs(int x,int y,int fa,int p,int len){
if(len >= l){ ans++; return; }
if(fa == 0){
for(int i = 1;i <= 8;i++){
int nx = x + fx[i][0],ny = y + fx[i][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[len]==a[x][y]) dfs(x,y,i,p,len+1);
}
}
else{
int nx = x + fx[fa][0],ny = y + fx[fa][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[len] == a[nx][ny]) dfs(nx,ny,fa,p,len+1);
int t;
if(p == 1){
t = fa+1; if(t == 5 || t == 9) t -= 4;
nx = x + fx[t][0],ny = y + fx[t][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[len] == a[nx][ny]) dfs(nx,ny,t,0,len+1);
t = fa-1; if(t == 0 || t == 4) t += 4;
nx = x + fx[t][0],ny = y + fx[t][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[len] == a[nx][ny]) dfs(nx,ny,t,0,len+1);
}
}
}
int main(){
cin >> s;
l = s.length();
cin >> n >> m;
for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++) cin >> a[i][j];
for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++) if(a[i][j] == s[0]) dfs(i,j,0,1,1);
cout << ans << endl;
return 0;
}