# https://yukicoder.me/problems/no/3202 MOD = 10 ** 9 + 7 def prod(left, right): n = len(left) new_matrix =[[0] * n for _ in range(n)] for i in range(n): for j in range(n): for k in range(n): new_matrix[i][j] += (left[i][k] * right[k][j]) % MOD new_matrix[i][j] %= MOD return new_matrix def prod_vec(mat, vec): n = len(vec) new_vec = [0] * n for i in range(n): for j in range(n): new_vec[i] += (mat[i][j] * vec[j]) % MOD new_vec[i] %= MOD return new_vec def main(): T = input() K = int(input()) A0 = [ [1, 1, 0, 2, 0, 1, 1], [0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 1, 1], [0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 1], ] A1 = [ [1, 0, 0, 0, 0, 0, 0], [1, 1, 2, 0, 1, 0, 1], [0, 0, 1, 0, 0, 0, 0], [0, 0, 1, 1, 1, 0, 1], [0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 1], ] mat = [[0] * 7 for _ in range(7)] for i in range(7): mat[i][i] = 1 for t in T: if t == "0": mat = prod(A0, mat) else: mat = prod(A1, mat) vec = [0, 0, 0, 0, 0, 0, 1] while K > 0: if K % 2 == 1: vec = prod_vec(mat, vec) mat = prod(mat, mat) K //= 2 answer = (vec[0] + vec[1]) % MOD print(answer) if __name__ == "__main__": main()