#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;
const int maxn = 1e5 + 100;
const long double PI = acos(-1.0);
long long gcd(long long a, long long b) { return (a ? gcd(b % a, a) : b); }
long long power(long long a, long long n) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
    }
    n >>= 1;
    a *= a;
  }
  return p;
}
long long power(long long a, long long n, long long mod) {
  long long p = 1;
  while (n > 0) {
    if (n % 2) {
      p = p * a;
      p %= mod;
    }
    n >>= 1;
    a *= a;
    a %= mod;
  }
  return p % mod;
}
int n, m;
char s[5][5], c[5][5];
char t[5], g[5];
bool judge() {
  for (int i = 0; i < 4; i++)
    if (t[i] != g[i]) return false;
  return true;
}
int main() {
  while (~scanf("%s", s[1])) {
    scanf("%s", s[2]);
    scanf("%s", c[1]);
    scanf("%s", c[2]);
    t[0] = s[1][0];
    t[1] = s[1][1];
    t[2] = s[2][1];
    t[3] = s[2][0];
    g[0] = c[1][0];
    g[1] = c[1][1];
    g[2] = c[2][1];
    g[3] = c[2][0];
    int flv = 0;
    for (int i = 1; i <= 10; i++) {
      if (judge()) {
        flv = 1;
        break;
      } else {
        for (int j = 0; j < 4; j++)
          if (t[j] == 'X') {
            t[j] = t[(j + 1) % 4];
            t[(j + 1) % 4] = 'X';
            break;
          }
      }
    }
    t[0] = s[1][0];
    t[1] = s[1][1];
    t[2] = s[2][1];
    t[3] = s[2][0];
    for (int i = 1; i <= 10; i++) {
      if (judge()) {
        flv = 1;
        break;
      } else {
        for (int j = 0; j < 4; j++)
          if (t[j] == 'X') {
            t[j] = t[(j - 1 + 4) % 4];
            t[(j - 1 + 4) % 4] = 'X';
            break;
          }
      }
    }
    if (flv == 0)
      cout << "NO" << endl;
    else
      cout << "YES" << endl;
  }
  return 0;
}
