# include <bits/stdc++.h>
using namespace std;
using LL = long long;
using ULL = unsigned long long;
using Pll=pair<LL,LL>;
const double PI = acos(-1);
template<class T>constexpr T INF() { return ::std::numeric_limits<T>::max(); }
template<class T>constexpr T HINF() { return INF<T>() / 2; }
template <typename T_char>T_char TL(T_char cX) { return tolower(cX); };
template <typename T_char>T_char TU(T_char cX) { return toupper(cX); };
template<typename T>vector<T> make_v(size_t a){ return vector<T>(a); }
template<typename T,typename... Ts>auto make_v(size_t a, Ts... ts){ return vector<decltype(make_v<T>(ts...))>(a,make_v<T>(ts...)); }
template<typename T,typename V>typename enable_if<is_class<T>::value==0>::type fill_v(T &t, const V &v){ t = v; }
template<typename T,typename V>typename enable_if<is_class<T>::value!=0>::type fill_v(T &t, const V &v){ for(auto &e : t) fill_v(e, v); }
const int vy[] = { -1, -1, -1, 0, 1, 1, 1, 0 }, vx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
const int dx[4] = { 0,1,0,-1 }, dy[4] = { 1,0,-1,0 };
int popcnt(unsigned long long n) { int cnt = 0; for (int i = 0; i < 64; i++)if ((n >> i) & 1)cnt++; return cnt; }
int d_sum(LL n) { int ret = 0; while (n > 0) { ret += n % 10; n /= 10; }return ret; }
int d_cnt(LL n) { int ret = 0; while (n > 0) { ret++; n /= 10; }return ret; }
LL gcd(LL a, LL b) { if (b == 0)return a; return gcd(b, a%b); };
LL lcm(LL a, LL b) { LL g = gcd(a, b); return a / g*b; };
# define ALL(qpqpq)           (qpqpq).begin(),(qpqpq).end()
# define UNIQUE(wpwpw)        sort(ALL((wpwpw)));(wpwpw).erase(unique(ALL((wpwpw))),(wpwpw).end())
# define LOWER(epepe)         transform(ALL((epepe)),(epepe).begin(),TL<char>)
# define UPPER(rprpr)         transform(ALL((rprpr)),(rprpr).begin(),TU<char>)
# define FOR(i,tptpt,ypypy)   for(LL i=(tptpt);i<(ypypy);i++)
# define REP(i,upupu)         FOR(i,0,upupu)
# define INIT                 std::ios::sync_with_stdio(false);std::cin.tie(0)
LL h,w,d[500][500],ans;
Pll st,ed,ans_pos;
char c[500][500];
string s;
int main(){
    while(cin>>h&&h!=0){
      cin>>w;
      ans=INF<LL>();
      REP(i,h){
       REP(j,w){
         cin>>c[i][j];
         if(c[i][j]=='A')
         st=Pll(i,j);
        if(c[i][j]=='B')
         ed=Pll(i,j);
       }
      }
      cin>>s;
      queue<Pll>qu;
      REP(i,h)REP(j,w)d[i][j]=INF<LL>();
      qu.push(st);
      d[st.first][st.second]=0;
      while(!qu.empty()){
          Pll now=qu.front();
          qu.pop();
          REP(i,4){
              LL X=now.first+dx[i],Y=now.second+dy[i];
              if(X>=0&&X<h&&Y>=0&&Y<w&&c[X][Y]!='#'){
                  if(d[X][Y]>d[now.first][now.second]+1){
                     d[X][Y]=d[now.first][now.second]+1;
                     qu.push(Pll(X,Y));
                    }
              }
          }
      }
      LL cost=0;
      REP(cnt,400){
          REP(i,s.size()){
              if(d[ed.first][ed.second]<=cost){
                  if(cost<ans){
                  ans=min(ans,cost);
                  ans_pos=ed;
                  }
              }
              if(s[i]=='8'&&ed.first-1>=0){
                  ed.first--;
              }
              if(s[i]=='2'&&ed.first+1<h){
                  ed.first++;
              }
              if(s[i]=='4'&&ed.second-1>=0){
                  ed.second--;
              }
              if(s[i]=='6'&&ed.second+1<w){
                  ed.second++;
              }
          cost++;
          }
      }
      if(ans==INF<LL>()){
          cout<<"impossible"<<endl;
      }
      else{
          cout<<ans<<" "<<ans_pos.first<<" "<<ans_pos.second<<endl;
      }
    }
    return 0;
}


Measured memory_bytes: 3268