← Home
#include <bits/stdc++.h>
 
#define ll long long
const ll MOD = 998244353;
 
ll n, k;
ll a[1000005];
ll d[2100000];
ll lz[1100000];
ll size, LOG;
 
void apply(ll k, ll f) {
    d[k] = d[k] * f % MOD;
    if (k < size) lz[k] = lz[k] * f % MOD;
}
 
void push(ll k) {
    if (lz[k] != 1) {
        apply(k << 1, lz[k]);
        apply(k << 1 | 1, lz[k]);
        lz[k] = 1;
    }
}
 
void update(ll k) {
    d[k] = (d[k << 1] + d[k << 1 | 1]) % MOD;
}
 
void set_val(ll p, ll x) {
    p += size;
    for (ll i = LOG; i >= 1; i--) push(p >> i);
    d[p] = x % MOD;
    for (ll i = 1; i <= LOG; i++) update(p >> i);
}
 
ll prod(ll l, ll r) {
    l += size; r += size + 1;
    for (ll i = LOG; i >= 1; i--) {
        if (((l >> i) << i) != l) push(l >> i);
        if (((r >> i) << i) != r) push((r - 1) >> i);
    }
    ll resL = 0, resR = 0;
    while (l < r) {
        if (l & 1) {
            resL = (resL + d[l]) % MOD;
            l++;
        }
        if (r & 1) {
            r--;
            resR = (resR + d[r]) % MOD;
        }
        l >>= 1; r >>= 1;
    }
    return (resL + resR) % MOD;
}
 
void apply_range(ll l, ll r, ll f) {
    if (l > r) return;
    l += size; r += size + 1;
    for (ll i = LOG; i >= 1; i--) {
        if (((l >> i) << i) != l) push(l >> i);
        if (((r >> i) << i) != r) push((r - 1) >> i);
    }
    ll l2 = l, r2 = r;
    while (l < r) {
        if (l & 1) {
            apply(l, f);
            l++;
        }
        if (r & 1) {
            r--;
            apply(r, f);
        }
        l >>= 1; r >>= 1;
    }
    l = l2; r = r2;
    for (ll i = 1; i <= LOG; i++) {
        if (((l >> i) << i) != l) update(l >> i);
        if (((r >> i) << i) != r) update((r - 1) >> i);
    }
}
 
int main() {
    scanf("%lld %lld", &n, &k);
    for (ll i = 0; i < n; i++) scanf("%lld", &a[i]);
 
    if (a[n - 1] - a[n - 2] <= k) {
        printf("0\n");
        return 0;
    }
 
    size = 1;
    while (size < n) size <<= 1;
    LOG = 0;
    for (ll s = size; s > 1; s >>= 1) LOG++;
 
    for (ll i = 0; i < size; i++) lz[i] = 1;
    for (ll i = 0; i < 2 * size; i++) d[i] = 0;
    d[size + n - 1] = 1;
    for (ll i = size - 1; i >= 1; i--) d[i] = (d[i << 1] + d[i << 1 | 1]) % MOD;
 
    ll j = n - 1;
    for (ll i = n - 2; i >= 0; i--) {
        while (j > i && a[j - 1] - a[i] >= k + 1) j--;
        ll val = prod(j, n - 1);
        set_val(i, val);
        apply_range(j, n - 1, (n - 1 - i) % MOD);
        if (i + 1 <= j - 1) apply_range(i + 1, j - 1, (n - 1 - i - 1) % MOD);
    }
 
    ll ans = prod(0, n - 1);
    printf("%lld\n", ans);
    return 0;
}