#include <bits/stdc++.h>
using namespace std;
string a1, a2, b1, b2, fake;
stack<string> nn;
int doit(string src) {
  map<string, int> visit;
  visit[src] = 1;
  while (!(nn.empty())) {
    int px;
    string temp1;
    string tt = nn.top();
    temp1 = tt;
    nn.pop();
    if (tt == b1) return 1;
    for (int k = 0; k < 4; k++)
      if (tt[k] == 'X') px = k;
    if (px == 0) {
      swap(temp1[0], temp1[1]);
    } else if (px == 1) {
      swap(temp1[1], temp1[3]);
    } else if (px == 2) {
      swap(temp1[2], temp1[0]);
    } else if (px == 3) {
      swap(temp1[3], temp1[2]);
    }
    if (visit[temp1] == 0) {
      nn.push(temp1);
      visit[temp1] = 1;
    }
  }
  return 0;
}
int doit1(string src) {
  map<string, int> visit;
  visit[src] = 1;
  while (!(nn.empty())) {
    int px;
    string temp2;
    string tt = nn.top();
    temp2 = tt;
    nn.pop();
    if (tt == b1) return 1;
    for (int k = 0; k < 4; k++)
      if (tt[k] == 'X') px = k;
    if (px == 0) {
      swap(temp2[0], temp2[2]);
    } else if (px == 1) {
      swap(temp2[1], temp2[0]);
    } else if (px == 2) {
      swap(temp2[2], temp2[3]);
    } else if (px == 3) {
      swap(temp2[3], temp2[1]);
    }
    cout << temp2 << endl;
    if (visit[temp2] == 0) {
      nn.push(temp2);
      visit[temp2] = 1;
    }
  }
  return 0;
}
int main() {
  cin >> a1;
  cin >> a2;
  a1 += a2;
  nn.push(a1);
  cin >> b1;
  cin >> b2;
  b1 += b2;
  int res = doit(a1);
  nn = stack<string>();
  int res1 = doit1(a1);
  if (res == 1 || res1 == 1)
    cout << "YES";
  else
    cout << "NO";
}
