#include <bits/stdc++.h>
using namespace std;
void debug_out() { printf("\n"); }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cout << " " << (H);
  debug_out(T...);
  cout << '\n';
}
template <typename Container>
void print(const Container& cont) {
  for (auto const& x : cont) {
    std::cout << x << " ";
  }
  std::cout << endl;
}
bool is_number(string s) {
  return (strspn(s.c_str(), "-.0123456789") == s.size());
}
void presolve() {}
char a[2][2];
char original[2][2];
bool match() {
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      if (a[i][j] == original[i][j]) continue;
      if (a[i][j] != original[i][i]) return false;
    }
  }
  return true;
}
void shift() {
  if (a[0][0] == 'X') {
    a[0][0] = a[1][0];
    a[1][0] = 'X';
  } else if (a[0][1] == 'X') {
    a[0][1] = a[0][0];
    a[0][0] = 'X';
  } else if (a[1][0] == 'X') {
    a[1][0] = a[1][1];
    a[1][1] = 'X';
  } else if (a[1][1] == 'X') {
    a[1][1] = a[0][1];
    a[0][1] = 'X';
  }
}
void solve() {
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      cin >> a[i][j];
    }
  }
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      cin >> original[i][j];
    }
  }
  for (int i = 0; i < 12; i++) {
    shift();
    if (match()) {
      cout << "YES\n";
      return;
    }
  }
  cout << "NO\n";
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  int tc = 1;
  presolve();
  while (tc--) {
    solve();
  }
  return 0;
}
