#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(); }