#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T abs(T t) {
  return t < 0 ? -t : t;
}
const long long modn = 1000000007;
inline long long mod(long long x) { return x % modn; }
const int MAXN = 312345;
const int INF = 0x3f3f3f3f;
int n, m, k;
long long dp[MAXN][2];
long long s[MAXN][2];
int main() {
  scanf("%d%d", &n, &k);
  for (int t = 0; t < 2; t++)
    for (int a = 1; a <= n; a++) scanf("%lld", &s[a][t]);
  memset(dp, INF, sizeof(dp));
  dp[0][0] = dp[0][1] = 0;
  for (int i = 1; i <= n; i++) {
    for (int t = 0; t < 2; t++) {
      long long px = dp[i - 1][t];
      long long x = s[i][t];
      long long y = s[i][1 - t];
      if (px > k) continue;
      if (x * k >= y && px + x <= y * k)
        dp[i][t] = min(dp[i][t], 1ll);
      else if (px + x > y * k)
        dp[i][t] = min(dp[i][t], px + x - y * k);
      if (x * k >= y && x + px <= y * k)
        dp[i][1 - t] = min(dp[i][1 - t], 1ll);
      else if (y > x * k)
        dp[i][1 - t] = min(dp[i][1 - t], y - x * k);
    }
  }
  puts((min(dp[n][0], dp[n][1]) <= k ? "YES" : "NO"));
}
