#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 100;
int n, m;
char a[2][maxn];
bool vis[2][maxn];
struct node {
  int x, pos;
  int water;
} e, u, st;
bool bfs() {
  st.x = 1;
  st.pos = 0;
  st.water = 0;
  vis[st.pos][st.x] = true;
  queue<node> que;
  que.push(st);
  while (!que.empty()) {
    u = que.front();
    que.pop();
    e.pos = u.pos;
    e.x = u.x - 1;
    e.water = u.water + 1;
    if (e.x > 0 && e.x > e.water && a[e.pos][e.x] != 'X' && !vis[e.pos][e.x]) {
      que.push(e);
      vis[e.pos][e.x] = true;
    }
    e.x = u.x + 1;
    if (e.x > n) return true;
    if (e.x > 0 && e.x > e.water && a[e.pos][e.x] != 'X' && !vis[e.pos][e.x]) {
      que.push(e);
      vis[e.pos][e.x] = true;
    }
    e.x = u.x + m;
    if (e.x > n) return true;
    if (e.pos)
      e.pos = 0;
    else
      e.pos = 1;
    if (e.x > 0 && e.x > e.water && a[e.pos][e.x] != 'X' && !vis[e.pos][e.x]) {
      que.push(e);
      vis[e.pos][e.x] = true;
    }
  }
  return 0;
}
int main() {
  while (~scanf("%d %d", &n, &m)) {
    cin >> a[0] + 1 >> a[1] + 1;
    if (bfs())
      cout << "YES" << endl;
    else
      cout << "NO" << endl;
  }
  return 0;
}
