#include <bits/stdc++.h>
using namespace std;
char x[3][200000 + 5];
long n, m;
long c[2 * 200000 + 5];
bool b[3][200000 + 5];
queue<long> q;
int main() {
  long i, j, k, t;
  scanf("%ld%ld\n", &n, &m);
  for (i = (1); i <= (n); ++i) {
    scanf("%c", &x[1][i]);
    if (x[1][i] == 'X') b[1][i] = true;
  }
  scanf("\n");
  for (i = (1); i <= (n); ++i) {
    scanf("%c", &x[2][i]);
    if (x[2][i] == 'X') b[2][i] = true;
  }
  q.push(1);
  b[1][1] = true;
  b[1][0] = true;
  b[2][0] = true;
  while (!q.empty()) {
    i = q.front();
    q.pop();
    if (i <= n) {
      if (i <= c[i]) continue;
      if (!b[1][i + 1]) {
        b[1][i + 1] = true;
        q.push(i + 1);
        c[i + 1] = c[i] + 1;
        if (i + 1 > n) {
          printf("YES");
          return 0;
        }
      }
      if (!b[1][i - 1]) {
        b[1][i - 1] = true;
        q.push(i - 1);
        c[i - 1] = c[i] + 1;
      }
      if (!b[2][i + m]) {
        b[2][i + m] = true;
        q.push(i + m + n);
        c[i + m + n] = c[i] + 1;
        if (i + m > n) {
          printf("YES");
          return 0;
        }
      }
    } else {
      j = i;
      i -= n;
      if (i <= c[j]) continue;
      if (!b[2][i + 1]) {
        b[2][i + 1] = true;
        q.push(j + 1);
        c[j + 1] = c[j] + 1;
        if (i + 1 > n) {
          printf("YES");
          return 0;
        }
      }
      if (!b[2][i - 1]) {
        b[2][i - 1] = true;
        q.push(j - 1);
        c[j - 1] = c[j] + 1;
      }
      if (!b[1][i + m]) {
        b[1][i + m] = true;
        q.push(i + m);
        c[i + m] = c[j] + 1;
        if (i + m > n) {
          printf("YES");
          return 0;
        }
      }
    }
  }
  printf("NO");
}
