# https://yukicoder.me/problems/no/2994 p = 1009 def prod(poly1, poly2): n = len(poly1) new_poly = [0] * n for i in range(n): x = 0 for j in range(i + 1): x += (poly1[j] * poly2[i - j]) % p x %= p new_poly[i] = x return new_poly def main(): M, N = map(int, input().split()) K = list(map(int, input().split())) A = list(map(int, input().split())) # 多項式 f^p = A[0]であることから... k = 0 for i in reversed(range(1, M + 1)): k += K[i] k %= p - 1 coef = pow(A[0], k, p) k0 = K[0] poly = [0] * (N + 1) poly[0] = 1 base_poly = A.copy() while k0 > 0: if k0 % 2 == 1: poly = prod(poly, base_poly) base_poly = prod(base_poly, base_poly) k0 //= 2 answers = [] for i in range(N + 1): ans = (coef * poly[i]) % p answers.append(ans) print(" ".join(map(str,answers))) if __name__ == "__main__": main()