#include <bits/stdc++.h>
using namespace std;
void dor(int *x, int *y, int o) {
  if (o == 68) {
    *x = *x + 1;
  }
  if (o == 76) {
    *y = *y - 1;
  }
  if (o == 85) {
    *x = *x - 1;
  }
  if (o == 82) {
    *y = *y + 1;
  }
}
int main() {
  int n, m;
  char a[24][4] = {
      {'D', 'L', 'U', 'R'}, {'D', 'L', 'R', 'U'}, {'D', 'U', 'L', 'R'},
      {'D', 'U', 'R', 'L'}, {'D', 'R', 'L', 'U'}, {'D', 'R', 'U', 'L'},
      {'L', 'D', 'U', 'R'}, {'L', 'D', 'R', 'U'}, {'L', 'U', 'D', 'R'},
      {'L', 'U', 'R', 'D'}, {'L', 'R', 'D', 'U'}, {'L', 'R', 'U', 'D'},
      {'U', 'D', 'L', 'R'}, {'U', 'D', 'R', 'L'}, {'U', 'L', 'D', 'R'},
      {'U', 'L', 'R', 'D'}, {'U', 'R', 'D', 'L'}, {'U', 'R', 'L', 'D'},
      {'R', 'D', 'L', 'U'}, {'R', 'D', 'U', 'L'}, {'R', 'L', 'D', 'U'},
      {'R', 'L', 'U', 'D'}, {'R', 'U', 'D', 'L'}, {'R', 'U', 'L', 'D'}};
  cin >> n >> m;
  char mat[60][60], rules[101];
  int sx, sy, ex, ey;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> mat[i][j];
      if (mat[i][j] == 'S') {
        sx = i;
        sy = j;
      }
      if (mat[i][j] == 'E') {
        ex = i;
        ey = j;
      }
    }
  }
  cin >> rules;
  int c = 0;
  for (int i = 0; i < 24; i++) {
    int p = a[i][0] - 65;
    int q = a[i][1] - 65;
    int r = a[i][2] - 65;
    int s = a[i][3] - 65;
    int flag = 0;
    int x = sx, y = sy;
    for (int k = 0; k < strlen(rules); k++) {
      int t = rules[k] - 48;
      dor(&x, &y, a[i][t]);
      if (x >= 0 && x < n && y >= 0 && y < m && mat[x][y] != 'E' &&
          mat[x][y] != '#')
        continue;
      else if (mat[x][y] == 'E') {
        flag = 1;
        c++;
        break;
      } else
        break;
    }
  }
  cout << c << endl;
  return 0;
}
