#include using namespace std; template> void fft(vector &p, bool inv = 0) { int n = p.size(); int lg = __builtin_ctz(n); assert(n == (1<> 1; k > (i^=k); k >>= 1) ; if (j < i) swap(p[i], p[j]); } vector ws = { inv ? CF(1) / w : w }; for (int i = 1; i < lg; ++i) ws.push_back(ws[i - 1] * ws[i - 1]); reverse(ws.begin(), ws.end()); for (int i = 0; i < lg; ++i) { for (int k = 0; k < n; k += 2< vector polyMul(const vector &a, const vector &b) { int n = 1; while (n < max(a.size(), b.size())) n *= 2; using CF = complex; vector pa(n); { for (int i = 0; i < (int) a.size(); ++i) pa[i] = a[i]; fft(pa); } vector pb(n); { for (int i = 0; i < (int) b.size(); ++i) pb[i] = b[i]; fft(pb); } vector pc(n); { for (int i = 0; i < n; ++i) pc[i] = pa[i] * pb[i]; } vector c(n); { fft(pc, 1); for (int i = 0; i < n; ++i) c[i] = real(pc[i]); } return c; } int main() { ios::sync_with_stdio(false); int N, Q; { cin >> N >> Q; } vector A(N); { for (int i = 0; i < N; ++i) { cin >> A[i]; } } vector R(Q); { for (int i = 0; i < Q; ++i) { cin >> R[i]; } } vector polyA(2 * N); { for (int i = 0; i < 2 * N; ++i) { polyA[i] = A[i % N]; } } vector polyB(2 * N); { for (int i = 0; i < Q; ++i) { polyB[N - R[i]] += 1; } } vector polyC = polyMul(polyA, polyB); for (int i = N; i < 2 * N; ++i) { cout << (int) round(polyC[i]) << " \n"[i + 1 == 2 * N]; } }