#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
ostream &operator<<(ostream &O, pair<T1, T2> &t) {
  return O << "(" << t.first << "," << t.second << ")";
}
template <typename T>
ostream &operator<<(ostream &O, vector<T> &t) {
  for (int _ = 0; _ < (int)t.size(); ++_) O << t[_] << " ";
  return O;
}
void dout() { cout << endl; }
template <typename Head, typename... Tail>
void dout(Head H, Tail... T) {
  cout << H << " ";
  dout(T...);
}
int main() {
  string s1, s2, s3, s4;
  cin >> s1 >> s2 >> s3 >> s4;
  string s = s1 + s2;
  string str = s3 + s4;
  srand(time(0));
  bool f = false;
  for (int i = 0; i < 100500 && !f; ++i) {
    int t = rand() % 2;
    int j;
    for (j = 0; j < s.size(); ++j)
      if (s[j] == 'X') break;
    if (t)
      swap(s[j], s[j ^ 1]);
    else
      swap(s[j], s[j ^ 2]);
    if (s == str) f = true;
  }
  cout << (f ? "YES" : "NO");
  return 0;
}
int cpp4cf_main() {
  freopen("A.cpp", "r", stdin);
  char s[99];
  bool f;
  while (true) {
    cin >> s;
    if (cin.eof()) break;
    if (strstr(s, "/*")) {
      cin >> s;
      if (strstr(s, "Test")) {
        cin >> s;
        if (strstr(s, "on")) {
          cout << "Output: ";
          cpp4cf_main();
          cout << "\nAnswer: ";
          f = false;
          while (true) {
            cin >> s;
            if (strstr(s, "*/")) break;
            if (strstr(s, "//")) {
              if (f)
                cout << endl;
              else
                f = true;
            } else
              cout << s << " ";
          }
          cout << "\n\n";
        }
      }
    }
  }
  return 0;
}
