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)