#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const int B = 14;
const int SZ = 1 << B;
long long modpow(long long a, long long e) {
long long res = 1;
while (e > 0) {
if (e & 1) res = res * a % MOD;
a = a * a % MOD;
e >>= 1;
}
return res;
}
int submod(int a, int b) {
a -= b;
if (a < 0) a += MOD;
return a;
}
int addmod(int a, int b) {
a += b;
if (a >= MOD) a -= MOD;
return a;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k, L, R;
cin >> n >> k >> L >> R;
vector<int> cnt(SZ, 0);
for (int i = 0; i < n; i++) {
int x;
cin >> x;
cnt[x]++;
}
vector<int> fact(n + 1), invfact(n + 1);
fact[0] = 1;
for (int i = 1; i <= n; i++) {
fact[i] = 1LL * fact[i - 1] * i % MOD;
}
invfact[n] = modpow(fact[n], MOD - 2);
for (int i = n; i >= 1; i--) {
invfact[i - 1] = 1LL * invfact[i] * i % MOD;
}
auto C = [&](int N, int K) -> int {
if (K < 0 || K > N) return 0;
return 1LL * fact[N] * invfact[K] % MOD * invfact[N - K] % MOD;
};
// SOS DP:
// cnt[mask] = number of elements x such that x is a submask of mask.
for (int b = 0; b < B; b++) {
for (int mask = 0; mask < SZ; mask++) {
if (mask & (1 << b)) {
cnt[mask] += cnt[mask ^ (1 << b)];
}
}
}
vector<int> ways(SZ);
// ways[mask] = number of k-subsets whose OR is a submask of mask.
for (int mask = 0; mask < SZ; mask++) {
ways[mask] = C(cnt[mask], k);
}
// Möbius inversion:
// after this, ways[mask] = number of k-subsets whose OR is exactly mask.
for (int b = 0; b < B; b++) {
for (int mask = 0; mask < SZ; mask++) {
if (mask & (1 << b)) {
ways[mask] = submod(ways[mask], ways[mask ^ (1 << b)]);
}
}
}
int ans = 0;
for (int mask = max(0, L); mask < SZ && mask <= R; mask++) {
if (mask % 3 == 0) {
ans = addmod(ans, ways[mask]);
}
}
cout << ans << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTU9EID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IEIgPSAxNDsKY29uc3QgaW50IFNaID0gMSA8PCBCOwoKbG9uZyBsb25nIG1vZHBvdyhsb25nIGxvbmcgYSwgbG9uZyBsb25nIGUpIHsKICAgIGxvbmcgbG9uZyByZXMgPSAxOwogICAgd2hpbGUgKGUgPiAwKSB7CiAgICAgICAgaWYgKGUgJiAxKSByZXMgPSByZXMgKiBhICUgTU9EOwogICAgICAgIGEgPSBhICogYSAlIE1PRDsKICAgICAgICBlID4+PSAxOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKaW50IHN1Ym1vZChpbnQgYSwgaW50IGIpIHsKICAgIGEgLT0gYjsKICAgIGlmIChhIDwgMCkgYSArPSBNT0Q7CiAgICByZXR1cm4gYTsKfQoKaW50IGFkZG1vZChpbnQgYSwgaW50IGIpIHsKICAgIGEgKz0gYjsKICAgIGlmIChhID49IE1PRCkgYSAtPSBNT0Q7CiAgICByZXR1cm4gYTsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGludCBuLCBrLCBMLCBSOwogICAgY2luID4+IG4gPj4gayA+PiBMID4+IFI7CgogICAgdmVjdG9yPGludD4gY250KFNaLCAwKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGludCB4OwogICAgICAgIGNpbiA+PiB4OwogICAgICAgIGNudFt4XSsrOwogICAgfQoKICAgIHZlY3RvcjxpbnQ+IGZhY3QobiArIDEpLCBpbnZmYWN0KG4gKyAxKTsKCiAgICBmYWN0WzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGZhY3RbaV0gPSAxTEwgKiBmYWN0W2kgLSAxXSAqIGkgJSBNT0Q7CiAgICB9CgogICAgaW52ZmFjdFtuXSA9IG1vZHBvdyhmYWN0W25dLCBNT0QgLSAyKTsKICAgIGZvciAoaW50IGkgPSBuOyBpID49IDE7IGktLSkgewogICAgICAgIGludmZhY3RbaSAtIDFdID0gMUxMICogaW52ZmFjdFtpXSAqIGkgJSBNT0Q7CiAgICB9CgogICAgYXV0byBDID0gWyZdKGludCBOLCBpbnQgSykgLT4gaW50IHsKICAgICAgICBpZiAoSyA8IDAgfHwgSyA+IE4pIHJldHVybiAwOwogICAgICAgIHJldHVybiAxTEwgKiBmYWN0W05dICogaW52ZmFjdFtLXSAlIE1PRCAqIGludmZhY3RbTiAtIEtdICUgTU9EOwogICAgfTsKCiAgICAvLyBTT1MgRFA6CiAgICAvLyBjbnRbbWFza10gPSBudW1iZXIgb2YgZWxlbWVudHMgeCBzdWNoIHRoYXQgeCBpcyBhIHN1Ym1hc2sgb2YgbWFzay4KICAgIGZvciAoaW50IGIgPSAwOyBiIDwgQjsgYisrKSB7CiAgICAgICAgZm9yIChpbnQgbWFzayA9IDA7IG1hc2sgPCBTWjsgbWFzaysrKSB7CiAgICAgICAgICAgIGlmIChtYXNrICYgKDEgPDwgYikpIHsKICAgICAgICAgICAgICAgIGNudFttYXNrXSArPSBjbnRbbWFzayBeICgxIDw8IGIpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICB2ZWN0b3I8aW50PiB3YXlzKFNaKTsKCiAgICAvLyB3YXlzW21hc2tdID0gbnVtYmVyIG9mIGstc3Vic2V0cyB3aG9zZSBPUiBpcyBhIHN1Ym1hc2sgb2YgbWFzay4KICAgIGZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgU1o7IG1hc2srKykgewogICAgICAgIHdheXNbbWFza10gPSBDKGNudFttYXNrXSwgayk7CiAgICB9CgogICAgLy8gTcO2Yml1cyBpbnZlcnNpb246CiAgICAvLyBhZnRlciB0aGlzLCB3YXlzW21hc2tdID0gbnVtYmVyIG9mIGstc3Vic2V0cyB3aG9zZSBPUiBpcyBleGFjdGx5IG1hc2suCiAgICBmb3IgKGludCBiID0gMDsgYiA8IEI7IGIrKykgewogICAgICAgIGZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgU1o7IG1hc2srKykgewogICAgICAgICAgICBpZiAobWFzayAmICgxIDw8IGIpKSB7CiAgICAgICAgICAgICAgICB3YXlzW21hc2tdID0gc3VibW9kKHdheXNbbWFza10sIHdheXNbbWFzayBeICgxIDw8IGIpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaW50IGFucyA9IDA7CgogICAgZm9yIChpbnQgbWFzayA9IG1heCgwLCBMKTsgbWFzayA8IFNaICYmIG1hc2sgPD0gUjsgbWFzaysrKSB7CiAgICAgICAgaWYgKG1hc2sgJSAzID09IDApIHsKICAgICAgICAgICAgYW5zID0gYWRkbW9kKGFucywgd2F5c1ttYXNrXSk7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7CiAgICByZXR1cm4gMDsKfQ==