import std;
using namespace std;
int main()
{
int c=0, t=0;
cin >> c >> t;
for (int i = 1; i <= t; i++) {
string n;
cin >> n;
int leg = n.size();
int v[11];
memset(v, 0, sizeof(v));
for (int j = 1; j <= 9; j++) {
cin >> v[j];
}
int dp[100007][7] = {};
int ccf[100007][7] = {};
int INF = 0x3fffffff;
int cnt = 0;
for (int m = 0; m < leg; m++) {
cnt+= v[n[m]-'0'];
dp[m + 1][0] = cnt;
}
dp[0][0] = 0;
dp[0][1] = INF;
dp[0][2] = INF;
dp[0][3] = INF;
dp[0][4] = INF;
dp[0][5] = INF;
dp[0][6] = INF;
for (int o = 1; o <= leg; o++){
for (int p = 1; p <= 6; p++) {
dp[o][p] = min((dp[o - 1][p] + v[n[o - 1]-'0']), (dp[o - 1][p - 1] + ccf[o - 1][p - 1] * 9 + (n[o - 1]-'0')));
ccf[o][p] = ((dp[o - 1][p] + v[n[o - 1] - '0']) < (dp[o - 1][p - 1] + ccf[o - 1][p - 1] * 10 + (n[o - 1] - '0'))) ? ccf[o - 1][p] : (ccf[o - 1][p - 1] * 10 + (n[o - 1] - '0'));
}
}
int num = cnt;
int use = 0;
for (int q = 1; q <= 6; q++) {
if (dp[leg][q] <= num) {
num = dp[leg][q];
use = q;
}
}
cout << num << endl;
cout << ccf[leg][use] << endl;
}
return 0;
}