#include <bits/stdc++.h>
using namespace std;
char arr[2][100010];
int vis[2][100010];
int k, n, curj1, curj2;
bool valid(int i, int j) {
  if (i >= 0 && i < 2 && j >= 0 && j >= n) return true;
  if (i >= 0 && i < 2 && j >= 0 && j < n && arr[i][j] != 'X' && vis[i][j] == 0)
    return true;
  return false;
}
void bfs(int i, int j) {
  queue<pair<int, int> > q;
  q.push(make_pair(i, j));
  vis[i][j] = 1;
  while (!q.empty()) {
    int toi = q.front().first;
    int toj = q.front().second;
    q.pop();
    if (toj >= n) {
      cout << "YES" << endl;
      return;
    }
    if (valid(toi + 1, toj + k)) {
      q.push(make_pair(toi + 1, toj + k));
      vis[toi + 1][toj + k] = vis[toi][toj] + 1;
    }
    if (valid(toi - 1, toj + k)) {
      q.push(make_pair(toi - 1, toj + k));
      vis[toi - 1][toj + k] = vis[toi][toj] + 1;
    }
    if (valid(toi, toj + 1)) {
      q.push(make_pair(toi, toj + 1));
      vis[toi][toj + 1] = vis[toi][toj] + 1;
    }
    if (valid(toi, toj - 1) && toj - 1 > vis[toi][toj] - 1) {
      q.push(make_pair(toi, toj - 1));
      vis[toi][toj - 1] = vis[toi][toj] + 1;
    }
  }
  cout << "NO" << endl;
}
int main() {
  int i, j;
  cin >> n >> k;
  for (i = 0; i < 2; i++) {
    for (j = 0; j < n; j++) cin >> arr[i][j];
  }
  bfs(0, 0);
  return 0;
}
