#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
//英语 抄博友程序 trie树实现 ac自动机未实现 没掌握
int dx[8]={-1,-1,0,1,1, 1, 0,-1};//抄博友程序
int dy[8]={ 0, 1,1,1,0,-1,-1,-1};
char G[1008][1008];
char da[1008];//抄博友程序
int xx;
int yy;
int vis[1008];
int ans[1008][4];
int n,m;
struct trie{
int v;
trie* nex[26];
trie()
{
v=0;
for(int i=0;i<26;i++)
{
nex[i]=NULL;
}
}
};
trie root;//抄博友程序
/*
void build(string s,int tag)//wa
{
trie* p=&root;
int i=0;
while(s[i])
{
p=p->nex[s[i]-'A'];
if(p==NULL)
{
p=new trie();//wa
}
i++;
}
p->v=tag;
}*/
void build(string str, int in) {
int i = 0, id;
trie *p = &root, *q;
while (str[i]) {
id = str[i] - 'A';
++i;
if (p->nex[id] == NULL) {
//q = new trie();
//p->nex[id] = q;
p->nex[id]= new trie();//背
}
p = p->nex[id];//背
}
p->v = in;
}
void find(trie* p,int x,int y, int k)//抄博友程序
{
if(p==NULL)
{
return;
}
//if(x<0||x>=n||y<0||y>=m)//WA
//{
// return;
//}
if(p->v&&vis[p->v]==0)
{
vis[p->v]=1;
ans[p->v][0]=xx;
ans[p->v][1]=yy;
ans[p->v][2]=k;
}
if(x<0||x>=n||y<0||y>=m)//ac 背
{
return;
}
find(p->nex[G[x][y]-'A'],x+dx[k],y+dy[k],k);
}
int main()
{
int w;
cin>>n>>m>>w;
for(int i=0;i<n;i++)
{
cin>>G[i];
}
for(int i=1;i<=w;i++)
{
cin>>da;
build(da,i);
}
memset(vis,0,sizeof(vis));
for(xx=0;xx<n;xx++)
{
for(yy=0;yy<n;yy++)
{
for(int k=0;k<8;k++)
{
find(&root,xx,yy,k);
}
}
}
for(int i=1;i<=w;i++)
{
cout<<ans[i][0]<<" "<<ans[i][1]<<" "<<(char)(ans[i][2]+'A')<<endl;
}
return 0;
}