#include <bits/stdc++.h>
#define int long long
using namespace std;
int mod = 1e9 + 7;
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// freopen("Submask.inp", "r", stdin);
// freopen("Submask.out", "w", stdout);
int n, x, k, l, r; cin >> n >> k >> l >> r;
vector<int> inv(2000006), c(2000006);
inv[1] = 1;
for(int i = 2; i <= 2000000; i++) inv[i] = (mod - (mod/i) * inv[mod % i] % mod) % mod;
for(int i = 0; i < k; i++) c[i] = 0;
c[k] = 1;
for(int i = k+1; i <= 2000000; i++){
c[i] = c[i-1] * i % mod;
c[i] = c[i] * inv[i-k] % mod;
}
int sz = 1<<20;
int freq[sz], dp[sz], a[n];
memset(dp, 0, sizeof dp);
memset(freq, 0, sizeof freq);
for(int i = 0; i < n; i++){
cin >> a[i];
freq[a[i]]++;
}
for(int i = 0; i < n; i++){
dp[a[i]] = freq[a[i]];
}
for(int i = 0; i < 20; i++){
for(int j = 1; j < sz; j++){
if((j >> i) & 1){
dp[j] += dp[j ^ (1 << i)];
}
}
}
for(int i = 0; i < sz; i++){
if(dp[i] < k) dp[i] = 0;
else dp[i] = c[dp[i]];
}
for(int i = 0; i < 20; i++){
for(int j = 1; j < sz; j++){
if((j >> i) & 1){
dp[j] = (dp[j] - dp[j ^ (1 << i)] + mod) % mod;
}
}
}
int res = 0;
for(int i = (l / 3 + (l % 3 != 0)) * 3; i < r; i += 3){
res = (res + dp[i]) % mod ;
}
cout << res;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbW9kID0gMWU5ICsgNzsKc2lnbmVkIG1haW4oKXsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKCS8vIGZyZW9wZW4oIlN1Ym1hc2suaW5wIiwgInIiLCBzdGRpbik7CgkvLyBmcmVvcGVuKCJTdWJtYXNrLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIGludCBuLCB4LCBrLCBsLCByOyBjaW4gPj4gbiA+PiBrID4+IGwgPj4gcjsKICAgIAogICAgdmVjdG9yPGludD4gaW52KDIwMDAwMDYpLCBjKDIwMDAwMDYpOwogICAgaW52WzFdID0gMTsKICAgIGZvcihpbnQgaSA9IDI7IGkgPD0gMjAwMDAwMDsgaSsrKSBpbnZbaV0gPSAobW9kIC0gKG1vZC9pKSAqIGludlttb2QgJSBpXSAlIG1vZCkgJSBtb2Q7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgazsgaSsrKSBjW2ldID0gMDsKICAgIGNba10gPSAxOwogICAgZm9yKGludCBpID0gaysxOyBpIDw9IDIwMDAwMDA7IGkrKyl7CiAgICAgICAgY1tpXSA9IGNbaS0xXSAqIGkgJSBtb2Q7CiAgICAgICAgY1tpXSA9IGNbaV0gKiBpbnZbaS1rXSAlIG1vZDsKICAgIH0KICAgIGludCBzeiA9IDE8PDIwOwogICAgaW50IGZyZXFbc3pdLCBkcFtzel0sIGFbbl07CiAgICBtZW1zZXQoZHAsIDAsIHNpemVvZiBkcCk7CiAgICBtZW1zZXQoZnJlcSwgMCwgc2l6ZW9mIGZyZXEpOwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAJY2luID4+IGFbaV07CiAgICAJZnJlcVthW2ldXSsrOwogICAgfQogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAJZHBbYVtpXV0gPSBmcmVxW2FbaV1dOwogICAgfQogICAgZm9yKGludCBpID0gMDsgaSA8IDIwOyBpKyspewogICAgCWZvcihpbnQgaiA9IDE7IGogPCBzejsgaisrKXsKICAgIAkJaWYoKGogPj4gaSkgJiAxKXsKICAgIAkJCWRwW2pdICs9IGRwW2ogXiAoMSA8PCBpKV07CiAgICAJCX0KICAgIAl9CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgc3o7IGkrKyl7CiAgICAJaWYoZHBbaV0gPCBrKSBkcFtpXSA9IDA7CiAgICAJZWxzZSBkcFtpXSA9IGNbZHBbaV1dOwogICAgfQoJZm9yKGludCBpID0gMDsgaSA8IDIwOyBpKyspewoJICAgIGZvcihpbnQgaiA9IDE7IGogPCBzejsgaisrKXsKCSAgICAJaWYoKGogPj4gaSkgJiAxKXsKCSAgICAJCWRwW2pdID0gKGRwW2pdIC0gZHBbaiBeICgxIDw8IGkpXSArIG1vZCkgJSBtb2Q7CgkgICAgCX0KCSAgICB9Cgl9CglpbnQgcmVzID0gMDsKCWZvcihpbnQgaSA9IChsIC8gMyArIChsICUgMyAhPSAwKSkgKiAzOyBpIDwgcjsgaSArPSAzKXsKCQlyZXMgPSAocmVzICsgZHBbaV0pICUgbW9kIDsKCX0KICAgIGNvdXQgPDwgcmVzOwogICAgCn0K