#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target( \
    "sse,sse2,sse3,ssse3,sse4,sse4.1,sse4.2,popcnt,mmx,avx,tune=native")
using namespace std;
const int MOD = 1000000007;
const int UNDEF = -1;
const int INF = 1 << 30;
template <typename T>
inline bool chkmax(T &aa, T bb) {
  return aa < bb ? aa = bb, true : false;
}
template <typename T>
inline bool chkmin(T &aa, T bb) {
  return aa > bb ? aa = bb, true : false;
}
int rint();
char rch();
long long rlong();
const int mn = 3e5 + 4;
long long inp[2][mn];
long long f[2][2];
long long k;
long long aa(long long sa, long long a, long long b) {
  if (sa > k) return INF;
  if (sa + a > (b + 1) * k) return INF;
  if (b > a * k) return INF;
  return max(1LL, sa + a - b * k);
}
long long ab(long long sa, long long a, long long b) {
  if (sa > k) return INF;
  if (sa + a > b * k) return INF;
  if (b > (a + 1) * k) return INF;
  return max(1LL, b - a * k);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n >> k;
  for (int t = 0; t < 2; t++)
    for (int i = 1; i <= n; i++) cin >> inp[t][i];
  int cur = 0, nxt = 1;
  for (int i = 1; i <= n; i++) {
    f[nxt][0] = f[nxt][1] = INF;
    for (int A = 0; A < 2; A++) {
      for (int T = 0; T < 2; T++) {
        long long sa = f[cur][A];
        if (sa > k) continue;
        int B = A ^ 1;
        long long a = inp[A][i], b = inp[B][i];
        if (T == A) {
          chkmin(f[nxt][T], aa(sa, a, b));
        } else {
          chkmin(f[nxt][T], ab(sa, a, b));
        }
      }
    }
    swap(cur, nxt);
  }
  for (int A = 0; A < 2; A++) {
    if (f[cur][A] <= k) {
      printf("YES\n");
      exit(0);
    }
  }
  printf("NO\n");
}
