import std.stdio, std.algorithm, std.array, std.conv, std.typecons; alias Set = bool[3 * 10^^5]; void main() { auto A = readln[0 .. $-1]; long[][] d; foreach (_; 0 .. A.length) { d ~= readln.split.to!(long[]); } auto NM = readln.split.to!(long[]); auto N = NM[0], M = NM[1]; long[][] S; foreach (_; 0 .. N) { S ~= readln[0 .. $-1].map!(c => countUntil(A, c)).array; } // sum[a][k] = sum_{j = 1}^N d(A[a], S[j][k]) long[][] sum; long[][] times; sum.length = A.length; times.length = A.length; foreach (a; 0 .. A.length) times[a].length = sum[a].length = M; foreach (j; 0 .. N) { foreach (k; 0 .. M) { times[S[j][k]][k] += 1; } } foreach (a; 0 .. A.length) { foreach (k; 0 .. M) { foreach (b; 0 .. A.length) sum[a][k] += times[b][k] * d[a][b]; } /+foreach (k; 0 .. M) { long val; foreach (j; 0 .. N) val += d[a][S[j][k]]; sum[a] ~= val; }+/ } foreach (i; 0 .. N) { long val; foreach (k; 0 .. M) val += sum[S[i][k]][k]; writeln(val); } }