#include <bits/stdc++.h>
using namespace std;
struct in {
  int x, y;
} a[300000];
int get(int prex, int prey, int x, int y, int k) {
  int num, ans = 100000000;
  if (prex <= k) {
    num = (prex + x + k - 1) / k - 1;
    if (y == num)
      ans = prex + x - num * k;
    else if (y > num && y <= (long long)x * k)
      ans = 1;
  }
  if (prey <= k) {
    num = (x + k - 1) / k - 1;
    if (y == num)
      ans = min(ans, x - num * k);
    else if (y > num && y - k + prey <= (long long)(x - 1) * k)
      ans = 1;
  }
  return ans;
}
int main() {
  int N, K, pre0 = 0, pre1 = 0, next0, next1;
  scanf("%d%d", &N, &K);
  for (int i = 1; i <= N; i++) scanf("%d", &a[i].x);
  for (int i = 1; i <= N; i++) scanf("%d", &a[i].y);
  for (int i = 1; i <= N; i++) {
    next0 = get(pre0, pre1, a[i].x, a[i].y, K);
    next1 = get(pre1, pre0, a[i].y, a[i].x, K);
    pre0 = next0;
    pre1 = next1;
  }
  if (pre0 <= K || pre1 <= K)
    puts("YES");
  else
    puts("NO");
  return 0;
}
