import sys
def input(): return sys.stdin.readline().strip()
MOD = 10**9 + 7
MAXI = 31
fac = [1] * (MAXI + 1)
ifac = [1] * (MAXI + 1)
for i in range(1, MAXI + 1):
fac[i] = fac[i - 1] * i % MOD
ifac[MAXI] = pow(fac[MAXI], MOD - 2, MOD)
for i in range(MAXI, 0, -1):
ifac[i - 1] = ifac[i] * i % MOD
def comb(k, i):
"""
C(k,i) = k*(k-1)*...*(k-i+1) / i!
"""
if i < 0 or i > k: return 0
num = 1
for j in range(i):
num = num * ((k - j) % MOD) % MOD
return num * ifac[i] % MOD
def build_seq(x, m, k):
L = [x]
for _ in range(k):
nxt = L[-1] + (L[-1] & m)
if nxt == L[-1]:
break
L.append(nxt)
return L
def expected_one(x, m, k):
L = build_seq(x, m, k)
T = len(L) - 1 # 序列最后一个有效下标
Cki = [comb(k, i) for i in range(T)]
pow2k = pow(2, k, MOD)
inv2k = pow(pow2k, MOD - 2, MOD)
prob = 0
exp = 0
for i in range(T):
prob = (prob + Cki[i]) % MOD
exp = (exp + L[i] * Cki[i]) % MOD
rest_prob = (pow2k - prob) % MOD
numerator = (exp + L[T] * rest_prob) % MOD
return numerator * inv2k % MOD
# ---- 主流程 ----
n, m, k = map(int, input().split())
A = list(map(int, input().split()))
ans = 0
for a in A:
ans = (ans + expected_one(a, m, k)) % MOD
print(ans)