#include <bits/stdc++.h>
const int MX = (int)1e6 + 17;
const int MOD = (int)1e9 + 7;
const long long INF = (long long)1e18 + 7;
using namespace std;
inline long long IN() {
  long long x = 0, ch = getchar(), f = 1;
  while (!isdigit(ch) && (ch != '-') && (ch != EOF)) ch = getchar();
  if (ch == '-') {
    f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
inline void OUT(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10)
    OUT(x / 10), putchar(x % 10 + '0');
  else
    putchar(x + '0');
}
string a, b, c, d;
char f[3][3], s[3][3];
int main() {
  cin >> a >> b >> c >> d;
  f[1][1] = a[0], f[1][2] = a[1];
  f[2][1] = b[0], f[2][2] = b[1];
  s[1][1] = c[0], s[1][2] = c[1];
  s[2][1] = d[0], s[2][2] = d[1];
  for (int z = 1; z <= 25; z++) {
    int cnt = 0;
    for (int i = 1; i <= 2; i++) {
      for (int j = 1; j <= 2; j++) {
        if (f[i][j] == s[i][j]) cnt++;
      }
      if (cnt == 4) {
        cout << "YES";
        return 0;
      }
    }
    if (f[1][1] == 'X')
      swap(f[1][2], f[1][1]);
    else if (f[1][2] == 'X')
      swap(f[1][2], f[2][2]);
    else if (f[2][2] == 'X')
      swap(f[2][2], f[2][1]);
    else if (f[2][1] == 'X')
      swap(f[2][1], f[1][1]);
    if (z % 5 == 0) {
      if (s[1][1] == 'X')
        swap(s[1][2], s[1][1]);
      else if (s[1][2] == 'X')
        swap(s[1][2], s[2][2]);
      else if (s[2][2] == 'X')
        swap(s[2][2], s[2][1]);
      else if (s[2][1] == 'X')
        swap(s[2][1], s[1][1]);
    }
  }
  cout << "NO";
  return 0;
}
