MOD = 10**9 + 7

def solve(n, K, R):
    # Преобразуем R в двоичную строку
    bin_R = bin(R)[2:]
    len_R = len(bin_R)
    
    # Инициализация DP
    dp = [[[*K for _ in range(2)] for _ in range(len_R+1)] for _ in range(len_R+1)]
    dp = 1  # Начальное состояние [1]
    
    for pos in range(len_R):
        for cnt in range(len_R):
            for flag in range(2):
                for mod in range(K):
                    if dp[pos][cnt][flag][mod] == 0:
                        continue
                    
                    limit = 1 if flag else int(bin_R[pos])
                    
                    for d in range(limit + 1):
                        new_flag = flag or (d < limit)
                        new_cnt = cnt + d
                        new_mod = (mod + d) % K
                        dp[pos+1][new_cnt][new_flag][new_mod] += dp[pos][cnt][flag][mod]
                        dp[pos+1][new_cnt][new_flag][new_mod] %= MOD
    
    # Суммируем все подходящие варианты
    result = 0
    for cnt in range(len_R+1):
        for flag in range(2):
            result = (result + dp[len_R][cnt][flag]) % MOD
    
    return result

# Чтение входных данных
n, K = map(int, input().split())
R = int(input())

# Вывод результата
print(solve(n, K, R))
