#include <bits/stdc++.h>
#define int long long
#define endl() putchar('\n')
#define space() putchar(' ')
using namespace std;
const int N = 2e5 + 5;
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while (!isdigit(ch)) {
if (ch == '-') f = -1;
ch = getchar();
}
while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
return x * f;
}
inline void write(int x) {
if (x < 0) putchar('-'), x = -x;
if (x > 9) write(x / 10);
return void(putchar(x % 10 + 48));
}
int n;
char a[N];
int val[N], dp[N][10], sum[N], mn[N];
signed main() {
int id = read(), T = read();
while (T--) {
scanf("%s", a + 1);
n = strlen(a + 1);
for (int i = 1; i <= n; ++i) {
for (int j = 0; j <= 7; ++j) dp[i][j] = 0;
a[i] = a[i] - '0';
sum[i] = 0;
}
for (int i = 1; i <= 9; ++i) val[i] = read(), mn[i - 1] = 1e18;
for (int i = n; i >= 1; --i) sum[i] = sum[i + 1] + val[(int)a[i]];
for (int i = 1; i <= n; ++i) {
dp[i][0] = dp[i - 1][0] + val[(int)a[i]];
for (int j = min(i, 6LL); j >= 1; --j) {
if (j == 1) dp[i][j] = dp[i - 1][0] + (int)a[i];
else dp[i][j] = mn[j - 1] + (int)a[i];
if (mn[j] + val[(int)a[i]] > dp[i][j] * 10) {
mn[j] = dp[i][j] * 10;
} else mn[j] += val[(int)a[i]];
}
}
int ans = LONG_LONG_MAX;
for (int i = 1; i <= n; ++i)
for (int j = 0; j <= min(i, 6LL); ++j) ans = min(ans, dp[i][j] + sum[i + 1]);
printf("%lld\n", ans);
}
return void(endl()), signed(0);
}
/*
0
1
123
10 10 10 10 10 10 10 10 10
*/
qz