#include <bits/stdc++.h>
#define int long long
#define st first
#define nd second
#define pb push_back
#define pob pop_back
#define all(st) st.begin(), st.end()
#define ii pair<int, int>
#define mod 1000003
using namespace std;
const int nmax = 1e6 + 5;
int n, m;
int a[nmax], fr[nmax], z[nmax], f[nmax];
int cal(int n) {
int m = n / 2;
return (fr[n] * z[m] % mod * z[m + 1] % mod);
}
int Pow(int a, int b) {
int res = 1;
while (b > 0) {
if (b & 1)
res = (res * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return res;
}
signed main() {
ios_base::sync_with_stdio(0), cin.tie(NULL), cout.tie(NULL);
// freopen("inp.inp","r",stdin);
// freopen("out.out","w",stdout);
cin >> n >> m;
for (int i = 1; i <= 2 * n; i++) cin >> a[i];
n = 2 * n;
fr[0] = 1;
for (int i = 1; i <= n; i++) fr[i] = (fr[i - 1] * i) % mod;
z[n] = Pow(fr[n], mod - 2);
for (int i = n; i >= 1; i--) z[i - 1] = (z[i] * i) % mod;
if (n <= 4000) {
f[0] = 1;
for (int i = 2; i <= n; i += 2)
for (int j = 0; j < i; j += 2)
if (a[i] - a[j + 1] <= m) {
f[i] = (f[i] + f[j] * cal(i - j - 2) % mod) % mod;
}
cout << f[n];
} else
cout << cal(n);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIHN0IGZpcnN0CiNkZWZpbmUgbmQgc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcG9iIHBvcF9iYWNrCiNkZWZpbmUgYWxsKHN0KSBzdC5iZWdpbigpLCBzdC5lbmQoKQojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgbW9kIDEwMDAwMDMKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbm1heCA9IDFlNiArIDU7CmludCBuLCBtOwppbnQgYVtubWF4XSwgZnJbbm1heF0sIHpbbm1heF0sIGZbbm1heF07CgppbnQgY2FsKGludCBuKSB7CiAgICBpbnQgbSA9IG4gLyAyOwogICAgcmV0dXJuIChmcltuXSAqIHpbbV0gJSBtb2QgKiB6W20gKyAxXSAlIG1vZCk7Cn0KCmludCBQb3coaW50IGEsIGludCBiKSB7CiAgICBpbnQgcmVzID0gMTsKICAgIHdoaWxlIChiID4gMCkgewogICAgICAgIGlmIChiICYgMSkKICAgICAgICAgICAgcmVzID0gKHJlcyAqIGEpICUgbW9kOwogICAgICAgIGEgPSAoYSAqIGEpICUgbW9kOwogICAgICAgIGIgPj49IDE7CiAgICB9CgogICAgcmV0dXJuIHJlczsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApLCBjaW4udGllKE5VTEwpLCBjb3V0LnRpZShOVUxMKTsKICAgIC8vIGZyZW9wZW4oImlucC5pbnAiLCJyIixzdGRpbik7CiAgICAvLyBmcmVvcGVuKCJvdXQub3V0IiwidyIsc3Rkb3V0KTsKCiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gMiAqIG47IGkrKykgY2luID4+IGFbaV07CiAgICBuID0gMiAqIG47CiAgICBmclswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGZyW2ldID0gKGZyW2kgLSAxXSAqIGkpICUgbW9kOwogICAgeltuXSA9IFBvdyhmcltuXSwgbW9kIC0gMik7CiAgICBmb3IgKGludCBpID0gbjsgaSA+PSAxOyBpLS0pIHpbaSAtIDFdID0gKHpbaV0gKiBpKSAlIG1vZDsKICAgIGlmIChuIDw9IDQwMDApIHsKICAgICAgICBmWzBdID0gMTsKICAgICAgICBmb3IgKGludCBpID0gMjsgaSA8PSBuOyBpICs9IDIpCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgaiArPSAyKQogICAgICAgICAgICAgICAgaWYgKGFbaV0gLSBhW2ogKyAxXSA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgZltpXSA9IChmW2ldICsgZltqXSAqIGNhbChpIC0gaiAtIDIpICUgbW9kKSAlIG1vZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICBjb3V0IDw8IGZbbl07CiAgICB9IGVsc2UKICAgICAgICBjb3V0IDw8IGNhbChuKTsKCiAgICByZXR1cm4gMDsKfQo=