#include <bits/stdc++.h>
using namespace std;
vector<vector<char>> F;
map<vector<vector<char>>, int> V;
bool confronta(vector<vector<char>> M) {
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++)
      if (M[i][j] != F[i][j]) return false;
  return true;
}
bool dfs(vector<vector<char>> M) {
  if (V[M] == 1) return false;
  V[M] = 1;
  if (confronta(M) == true) return true;
  int x, y;
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++)
      if (M[i][j] == 'X') x = i, y = j;
  if (x - 1 >= 0) {
    swap(M[x - 1][y], M[x][y]);
    if (dfs(M) == true) return true;
    swap(M[x - 1][y], M[x][y]);
  }
  if (x + 1 < 2) {
    swap(M[x + 1][y], M[x][y]);
    if (dfs(M) == true) return true;
    swap(M[x + 1][y], M[x][y]);
  }
  if (y - 1 >= 0) {
    swap(M[x][y - 1], M[x][y]);
    if (dfs(M) == true) return true;
    swap(M[x][y - 1], M[x][y]);
  }
  if (y + 1 < 2) {
    swap(M[x][y + 1], M[x][y]);
    if (dfs(M) == true) return true;
    swap(M[x][y + 1], M[x][y]);
  }
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  vector<vector<char>> M;
  M.resize(2);
  F.resize(2);
  M[0].resize(2), M[1].resize(2);
  F[0].resize(2), F[1].resize(2);
  string s;
  cin >> s;
  M[0][0] = s[0], M[0][1] = s[1];
  cin >> s;
  M[1][0] = s[0], M[1][1] = s[1];
  cin >> s;
  F[0][0] = s[0], F[0][1] = s[1];
  cin >> s;
  F[1][0] = s[0], F[1][1] = s[1];
  cout << ((dfs(M) == true) ? "YES" : "NO");
}
