#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);
}
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);
}
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 {
if (x[i] - (k-dp[i-1][0]) > 0) 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);
if (y[i]-(k-dp[i-1][1]) > 0) 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;
}