#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e6 + 5;
const int MOD = 1e9 + 7;
void add(int& a, int b) {
a += b;
if (a >= MOD) a -= MOD;
if (a < 0) a += MOD;
}
int n, k, L, R;
int a[N];
int fact[N], inv_fact[N];
int binpow(int a, int b) {
int ans = 1;
for (; b > 0; b >>= 1) {
if (b & 1) ans = 1ll * ans * a % MOD;
a = 1ll * a * a % MOD;
}
return ans;
}
void precompute() {
fact[0] = 1;
for (int i = 1; i <= n; i++) fact[i] = 1ll * fact[i - 1] * i % MOD;
inv_fact[n] = binpow(fact[n], MOD - 2);
for (int i = n - 1; i >= 0; i--) inv_fact[i] = 1ll * inv_fact[i + 1] * (i + 1) % MOD;
}
int nCk(int n, int k) {
if (n < k) return 0;
return 1ll * fact[n] * inv_fact[n - k] % MOD * inv_fact[k] % MOD;
}
int sos[1 << 20];
int sign(int mask) {
return (__builtin_parity(mask) ? 1 : -1);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k >> L >> R;
for (int i = 1; i <= n; i++) cin >> a[i];
precompute();
for (int i = 1; i <= n; i++) ++sos[a[i]];
for (int i = 0; i < 20; i++) {
for (int mask = 0; mask < (1 << 20); mask++) {
if (mask & (1 << i)) sos[mask] += sos[mask ^ (1 << i)];
}
}
for (int mask = 0; mask < (1 << 20); mask++) sos[mask] = sign(mask) * nCk(sos[mask], k);
for (int i = 0; i < 20; i++) {
for (int mask = 0; mask < (1 << 20); mask++) {
if (mask & (1 << i)) add(sos[mask], sos[mask ^ (1 << i)]);
}
}
for (int mask = 0; mask < (1 << 20); mask++) {
sos[mask] = sign(mask) * sos[mask];
if (sos[mask] < 0) sos[mask] += MOD;
}
int ans = 0;
for (int v = L; v <= R; v++) {
if (v % 3 == 0) add(ans, sos[v]);
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxZTYgKyA1OyAKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7ICAKCnZvaWQgYWRkKGludCYgYSwgaW50IGIpIHsKCWEgKz0gYjsgCglpZiAoYSA+PSBNT0QpIGEgLT0gTU9EOyAgCglpZiAoYSA8IDApIGEgKz0gTU9EOyAKfQoKaW50IG4sIGssIEwsIFI7ICAKaW50IGFbTl07CgppbnQgZmFjdFtOXSwgaW52X2ZhY3RbTl07IAoKaW50IGJpbnBvdyhpbnQgYSwgaW50IGIpIHsKCWludCBhbnMgPSAxOyAKCWZvciAoOyBiID4gMDsgYiA+Pj0gMSkgewoJCWlmIChiICYgMSkgYW5zID0gMWxsICogYW5zICogYSAlIE1PRDsgCgkJYSA9IDFsbCAqIGEgKiBhICUgTU9EOyAKCX0KCXJldHVybiBhbnM7Cn0KCnZvaWQgcHJlY29tcHV0ZSgpIHsKCWZhY3RbMF0gPSAxOyAgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGZhY3RbaV0gPSAxbGwgKiBmYWN0W2kgLSAxXSAqIGkgJSBNT0Q7IAoJaW52X2ZhY3Rbbl0gPSBiaW5wb3coZmFjdFtuXSwgTU9EIC0gMik7Cglmb3IgKGludCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSBpbnZfZmFjdFtpXSA9IDFsbCAqIGludl9mYWN0W2kgKyAxXSAqIChpICsgMSkgJSBNT0Q7IAp9CgppbnQgbkNrKGludCBuLCBpbnQgaykgewoJaWYgKG4gPCBrKSByZXR1cm4gMDsgICAKCXJldHVybiAxbGwgKiBmYWN0W25dICogaW52X2ZhY3RbbiAtIGtdICUgTU9EICogaW52X2ZhY3Rba10gJSBNT0Q7IAp9ICAKCmludCBzb3NbMSA8PCAyMF07IAoKaW50IHNpZ24oaW50IG1hc2spIHsKCXJldHVybiAoX19idWlsdGluX3Bhcml0eShtYXNrKSA/IDEgOiAtMSk7Cn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IGsgPj4gTCA+PiBSOyAgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAKCglwcmVjb21wdXRlKCk7ICAgCgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSArK3Nvc1thW2ldXTsgIAoKCWZvciAoaW50IGkgPSAwOyBpIDwgMjA7IGkrKykgewoJCWZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgMjApOyBtYXNrKyspIHsKCQkJaWYgKG1hc2sgJiAoMSA8PCBpKSkgc29zW21hc2tdICs9IHNvc1ttYXNrIF4gKDEgPDwgaSldOwoJCX0KCX0KCglmb3IgKGludCBtYXNrID0gMDsgbWFzayA8ICgxIDw8IDIwKTsgbWFzaysrKSBzb3NbbWFza10gPSBzaWduKG1hc2spICogbkNrKHNvc1ttYXNrXSwgayk7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7CgkJZm9yIChpbnQgbWFzayA9IDA7IG1hc2sgPCAoMSA8PCAyMCk7IG1hc2srKykgewoJCQlpZiAobWFzayAmICgxIDw8IGkpKSBhZGQoc29zW21hc2tdLCBzb3NbbWFzayBeICgxIDw8IGkpXSk7CgkJfQoJfQoKCWZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgMjApOyBtYXNrKyspIHsKCQlzb3NbbWFza10gPSBzaWduKG1hc2spICogc29zW21hc2tdOwoJCWlmIChzb3NbbWFza10gPCAwKSBzb3NbbWFza10gKz0gTU9EOwoJfQoKCWludCBhbnMgPSAwOyAgIAoJZm9yIChpbnQgdiA9IEw7IHYgPD0gUjsgdisrKSB7CgkJaWYgKHYgJSAzID09IDApIGFkZChhbnMsIHNvc1t2XSk7Cgl9CgoJY291dCA8PCBhbnMgPDwgJ1xuJzsKfQ==