//POJ 1204
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define ROOT 0
#define debug puts("wrong")
const int MM=1010;
const int MAX_NODE=100100;
const int CHI=26;
int L,C,W;
int cnt;
int len[MM];
int ansx[MM], ansy[MM], ansk[MM];
char text[MAX_NODE];
char ch[MM][MM];
char dir[8]={'C','D','E','F','G','H','A','B'};
int dx[8]={0,1,1,1,0,-1,-1,-1};
int dy[8]={1,1,0,-1,-1,-1,0,1};
struct ACtree {
int size;
int hash[300];
int val[MAX_NODE];
int fail[MAX_NODE];
int SQ[MAX_NODE];
int chd[MAX_NODE][CHI];
void get_hash() {
int i,j,k;
for(i=0;i<CHI;i++)
hash[i+'A']=i;
}
void init() {
size=fail[0]=0;
memset(val,0,sizeof(val));
memset(chd[0],0,sizeof(chd));
}
void insert(char *str,int k) {
int i,j,id,p=ROOT;
for(i=0;str[i];i++) {
id=hash[str[i]];
if(!chd[p][id]) {
chd[p][id]=++size;
memset(chd[size],0,sizeof(chd[size]));
}
p=chd[p][id];
}
val[p]=k;
}
void build() {
int i,j,k,id,p=ROOT,r,v;
int qhead,qtail;
qhead=qtail=0;
for(i=0;i<CHI;i++) {
if(chd[p][i]) {
SQ[qtail++]=chd[p][i];
fail[chd[p][i]]=ROOT;
}
}
while(qhead!=qtail) {
r=SQ[qhead++];
for(i=0;i<CHI;i++) {
v=chd[r][i];
if(v) SQ[qtail++]=v,fail[v]=chd[fail[r]][i];
else chd[r][i]=chd[fail[r]][i];
}
}
}
void solve(char *str,int xx,int yy,int dd) {
int i,j,k,id,tt,p=ROOT,v;
for(i=0;str[i];i++) {
id=hash[str[i]];
while(p&&!chd[p][id]) p=fail[p];
p=chd[p][id]; v=val[p];
if(v) {
tt=i-len[v];
ansx[v]=xx+tt*dx[dd],ansy[v]=yy+tt*dy[dd],ansk[v]=dd;
// printf("%d %d %d %d %d\n",i,v,xx,yy,dd);
}
}
}
}AC;
bool ok(int x,int y) {
if(x<0||x>=L||y<0||y>=C) return false;
else return true;
}
void get_data() {
int i,j,k,xx,yy;
for(i=0;i<L;i++) {
scanf("%s",ch[i]);
}
}
void solve() {
int i,j,k,xx,yy,dd;
char str[MM];
AC.init();
for(i=1;i<=W;i++) {
scanf("%s",str);
len[i]=strlen(str)-1;
AC.insert(str,i);
}
AC.build();
for(j=0;j<C;j++) {
for(k=0;k<8;k++) {
xx=0; yy=j; dd=k; cnt=0;
while(ok(xx,yy)) {
text[cnt++]=ch[xx][yy];
xx+=dx[k]; yy+=dy[k];
}
text[cnt]='\0';
AC.solve(text,0,j,dd);
}
}
for(j=0;j<C;j++) {
for(k=0;k<8;k++) {
xx=L-1; yy=j; dd=k; cnt=0;
while(ok(xx,yy)) {
text[cnt++]=ch[xx][yy];
xx+=dx[k]; yy+=dy[k];
}
text[cnt]='\0';
AC.solve(text,L-1,j,dd);
}
}
for(i=0;i<L;i++) {
for(k=0;k<8;k++) {
xx=i; yy=0; dd=k; cnt=0;
while(ok(xx,yy)) {
text[cnt++]=ch[xx][yy];
xx+=dx[k]; yy+=dy[k];
}
text[cnt]='\0';
AC.solve(text,i,0,dd);
}
}
for(i=0;i<L;i++) {
for(k=0;k<8;k++) {
xx=i; yy=C-1; dd=k; cnt=0;
while(ok(xx,yy)) {
text[cnt++]=ch[xx][yy];
xx+=dx[k]; yy+=dy[k];
}
text[cnt]='\0';
AC.solve(text,i,C-1,dd);
}
}
for(i=1;i<=W;i++) printf("%d %d %c\n",ansx[i],ansy[i],dir[ansk[i]]);
}
int main() {
AC.get_hash();
while(scanf("%d%d%d",&L,&C,&W)!=EOF) get_data(),solve();
return 0;
}