using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Security.Cryptography; using Microsoft.VisualBasic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); static string[] SList(long n) => Enumerable.Repeat(0, (int)n).Select(_ => ReadLine()).ToArray(); public static void Main() { Solve(); } static void Solve() { var a = ReadLine(); var d = NArr(a.Length); var c = NList; var (n, m) = (c[0], c[1]); var s = SList(n); var map = new int[26, 26]; for (var i = 0; i < d.Length; ++i) for (var j = 0; j < d[i].Length; ++j) { map[a[i] - 'a', a[j] - 'a'] = d[i][j]; } var count = new long[m, 26]; for (var i = 0; i < n; ++i) for (var j = 0; j < m; ++j) ++count[j, s[i][j] - 'a']; var pts = new long[m, 26]; for (var j = 0; j < m; ++j) for (var x = 0; x < 26; ++x) for (var y = 0; y < 26; ++y) { pts[j, x] += map[x, y] * count[j, y]; } var ans = new long[n]; for (var i = 0; i < n; ++i) for (var j = 0; j < m; ++j) ans[i] += pts[j, s[i][j] - 'a']; WriteLine(string.Join("\n", ans)); } }