#include<bits/stdc++.h>
#define ll long long
#define MO 1000000007ll
#define MXN 1000002
using namespace std;
inline void rd(ll& x) {
x = 0;
short f = 1;
char c = getchar();
while ((c < '0' || c > '9') && c != '-') c = getchar();
if (c == '-') f = -1, c = getchar();
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
x *= f;
}
ll T = 1, n, m, k, a[MXN], ans;
ll p[32];
ll ksm(ll a, ll b) {
ll s = 1;
while (b) {
if (b & 1) s *= a, s %= MO;
a *= a, a %= MO;
b >>= 1;
}
return s;
}
ll cal(ll n, ll m) { //求组合数
ll ans = 1;
for (ll i = 1, j = n - m + 1; i <= m; i++, j++)
ans *= j * ksm(i, MO - 2) % MO, ans %= MO;
return ans;
}
void solve() {
rd(n), rd(m), rd(k);
for (ll i = 0; i <= 30; i++)
p[i] = cal(k, i) * ksm(ksm(2, k), MO - 2) % MO,
p[31] += MO - p[i];
p[31] = (1 + p[31]) % MO;
for (ll i = 1, x; i <= n; i++) {
rd(x);
for (ll j = 0; j <= 31; j++) {
ans += x * p[j] % MO, ans %= MO;
x += x & m;
}
}
cout << ans << endl;
}
int main() {
while (T--) solve();
}