#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 10;
const int INF = 0x3f3f3f3f;
int n, k;
int x[maxn], y[maxn];
int dp[maxn][2];
void update(int idx, int v1, int v2) {
  dp[idx][0] = min(dp[idx][0], v1);
  dp[idx][1] = min(dp[idx][1], v2);
}
void update0(int x, int y, int idx) {
  if (x > y) {
    int d = x / k, r = x % k;
    if (r == 0) {
      if (y < d - 1)
        update(idx, INF, INF);
      else if (y == d - 1)
        update(idx, k, INF);
      else
        update(idx, 1, 1);
    } else {
      if (y < d)
        update(idx, INF, INF);
      else if (y == d)
        update(idx, r, INF);
      else
        update(idx, 1, 1);
    }
  } else if (x == y) {
    update(idx, INF, 1);
    if (x > 1 && k > 1) update(idx, 1, 1);
  } else {
    int d = y / k, r = y % k;
    if (r == 0) {
      if (x < d)
        update(idx, INF, INF);
      else if (x == d)
        update(idx, INF, k);
      else
        update(idx, 1, 1);
    } else {
      if (x < d + 1)
        update(idx, INF, INF);
      else if (x == d + 1)
        update(idx, INF, r);
      else
        update(idx, 1, 1);
    }
  }
}
void update1(int x, int y, int idx) {
  if (x > y) {
    int d = x / k, r = x % k;
    if (r == 0) {
      if (y < d)
        update(idx, INF, INF);
      else if (y == d)
        update(idx, k, INF);
      else
        update(idx, 1, 1);
    } else {
      if (y < d + 1)
        update(idx, INF, INF);
      else if (y == d + 1)
        update(idx, r, INF);
      else
        update(idx, 1, 1);
    }
  } else if (x == y) {
    update(idx, 1, INF);
    if (x > 1 && k > 1) update(idx, 1, 1);
  } else {
    int d = y / k, r = y % k;
    if (r == 0) {
      if (x < d - 1)
        update(idx, INF, INF);
      else if (x == d - 1)
        update(idx, INF, k);
      else
        update(idx, 1, 1);
    } else {
      if (x < d)
        update(idx, INF, INF);
      else if (x == d)
        update(idx, INF, r);
      else
        update(idx, 1, 1);
    }
  }
}
void solve() {
  memset(dp, INF, sizeof(dp));
  dp[0][0] = dp[0][1] = 0;
  update0(x[1], y[1], 1);
  update1(x[1], y[1], 1);
  for (int i = 2; i <= n; i++) {
    if (dp[i - 1][0] != INF) {
      if (x[i] - (k - dp[i - 1][0]) <= 0) {
        update0(x[i], y[i], i);
        update1(x[i], y[i], i);
      } else {
        update1(x[i] - (k - dp[i - 1][0]), y[i], i);
        update1(x[i], y[i], i);
      }
    }
    if (dp[i - 1][1] != INF) {
      if (y[i] - (k - dp[i - 1][1]) <= 0) {
        update0(x[i], y[i], i);
        update1(x[i], y[i], i);
      } else {
        update0(x[i], y[i], i);
        update0(x[i], y[i] - (k - dp[i - 1][1]), i);
      }
    }
  }
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d", &x[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &y[i]);
  solve();
  if (dp[n][0] == INF && dp[n][1] == INF)
    puts("NO");
  else
    puts("YES");
  return 0;
}
