#include <stdio.h>
#include <string.h>

typedef struct tag_Pair{
	int R;
	int C;
}Pair;


int main(){
	int H,W;
	char Map[21][21];
	char Pat[11];
	int i,j;
	
	while(1){
		scanf("%d %d",&H,&W);
		if(!H&&!W)break;
		for(i=0;i<H;i++){
			scanf("%s\n",Map[i]);
		}
		scanf("%s\n",Pat);
		
		int turn =0;
		int M[H][W];
		Pair P;P.R=-1;P.C=-1;
		
		for(i=0;i<H;i++){
			for(j=0;j<W;j++){
				M[i][j]=-1;
				if(Map[i][j]=='A')M[i][j]=0;
				if(Map[i][j]=='B'){
					P.R=i;
					P.C=j;
				}
			}
		}
		
		int chk=1;
		int FS[H*W+1];//ハッシュの代わり
		int FScnt=0;//ハッシュの要素の個数。H*Wが小さいのでO(N)で管理。。。
		int move;
		int k;
		int PatLength=strlen(Pat);
		
		while(1){
			turn++;
			//まずAを進める
			for(i=0;i<H;i++){
				for(j=0;j<W;j++){
					if(M[i][j]==turn-1){
						if(i-1>=0 && Map[i-1][j]!='#' && M[i-1][j]==-1)M[i-1][j]=turn;
						if(i+1<H  && Map[i+1][j]!='#' && M[i+1][j]==-1)M[i+1][j]=turn;
						if(j-1>=0 && Map[i][j-1]!='#' && M[i][j-1]==-1)M[i][j-1]=turn;
						if(j+1<W  && Map[i][j+1]!='#' && M[i][j+1]==-1)M[i][j+1]=turn;
					}
				}
			}

			move=(turn -1)%(PatLength);
			if(Pat[move]=='8'){if(P.R-1>=0)P.R-=1;}
			if(Pat[move]=='4'){if(P.C-1>=0)P.C-=1;}
			if(Pat[move]=='5'){;}
			if(Pat[move]=='6'){if(P.C+1<W)P.C+=1;}
			if(Pat[move]=='2'){if(P.R+1<H)P.R+=1;}
			if(M[P.R][P.C]!=-1)break;
			if(turn>H*W){
				//ループ停止条件：
				//turn>H*Wであれば、Aが行けるところにはすべてフラグが立っている
				//Bの動きの周期点をturn>H*W以降で観察すれば、Bがループに入ったかどうかが分かる。
				if(move==0){
*/					for(k=0;k<FScnt;k++){
						if(FS[k]==P.R*W+P.C){
							chk=0;
						}
					}
					if(chk==0)break;
					FScnt++;
					FS[P.R*W+P.C];
				}
			}
		}
		if(chk==0){
			printf("impossible\n");
			continue;
		}
		printf("%d %d %d\n",turn,P.R,P.C);
	}
	return 0;
}