#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INFF = 1e18;
const double pi = acos(-1.0);
const double inf = 1e18;
const double eps = 1e-9;
const long long mod = 1e9 + 7;
const int maxmat = 10;
const unsigned long long BASE = 133333331;
inline void RI(int &x) {
  char c;
  while ((c = getchar()) < '0' || c > '9')
    ;
  x = c - '0';
  while ((c = getchar()) >= '0' && c <= '9') x = (x << 3) + (x << 1) + c - '0';
}
const int dy[3] = {-1, 0, 1};
char maze[3][105];
bool vis[3][105][105];
int sx, sy;
int N, k;
struct Node {
  int x, y, t;
};
bool valid(int x, int y, int t) {
  return (x >= 0 && x < 3 && y >= 0 && y < N &&
          (maze[x][y + 2 * t] == '.' || maze[x][y + 2 * t] == 0));
}
bool bfs(int x, int y) {
  queue<Node> q;
  q.push((Node){x, y, 0});
  while (!q.empty()) {
    Node tmp = q.front();
    q.pop();
    if (tmp.y == N - 1) return true;
    if (maze[tmp.x][tmp.y + 1 + 2 * tmp.t] >= 'A' &&
        maze[tmp.x][tmp.y + 1 + 2 * tmp.t] <= 'Z')
      continue;
    for (int k = 0; k < 3; k++) {
      int tmpx = tmp.x + dy[k];
      int tmpy = tmp.y + 1;
      if (valid(tmpx, tmpy, tmp.t) && valid(tmpx, tmpy, tmp.t + 1) &&
          !vis[tmpx][tmpy][tmp.t + 1]) {
        vis[tmpx][tmpy][tmp.t + 1] = true;
        q.push((Node){tmpx, tmpy, tmp.t + 1});
      }
    }
  }
  return false;
}
int main(int argc, char const *argv[]) {
  int T;
  cin >> T;
  while (T--) {
    scanf("%d%d", &N, &k);
    memset(maze, 0, sizeof(maze));
    memset(vis, false, sizeof(vis));
    for (int i = 0; i < 3; i++) {
      char s[105];
      scanf("%s", s);
      for (int j = 0; j < N; j++) {
        maze[i][j] = s[j];
        if (maze[i][j] == 's') sx = i, sy = j;
      }
    }
    cout << (bfs(sx, sy) ? "YES" : "NO") << endl;
  }
  return 0;
}
