#include <bits/stdc++.h>
#define int long long
using namespace std;
int v[15];
int now[15],pos[15];
bool flag[100005];
signed main() {
int c,t; cin >> c >> t;
while(t--) {
string s; cin >> s;
int n = s.size(); s = ' ' + s; int nc = 0;
for(int i = 1;i <= 9;i++) cin >> v[i];
memset(pos,0x3f,sizeof now); memset(flag,0,sizeof flag);
now[0] = 0;
while(true) {
int minn = -0x7fffffff;
for(int i = 1;i <= n;i++) {
int I = s[i] - '0';
if(flag[i]) continue;
if(i <= pos[1]) {
int need = pow(10,nc) * I;
minn = max(minn,v[I] - need);
}
else if(i >= pos[nc]) {
int need = I;
minn = max(minn,v[I] - need);
}
for(int j = 1;j < nc;j++) {
if(i >= pos[j] && i <= pos[j+1]) {
int need = pow(10,nc-j) * I;
minn = max(minn,v[I] - need);
}
}
}
if(minn <= 0) break;
for(int i = 1;i <= n;i++) {
int I = s[i] - '0';
if(flag[i]) continue;
int need = 0;
if(i <= pos[1]) {
need = max(need,(int)pow(10,nc) * I);
}
else if(i >= pos[nc]) {
need = max(need,I);
}
for(int j = 1;j < nc;j++) {
if(i >= pos[j] && i <= pos[j+1]) {
need = max(need,(int)pow(10,nc-j) * I);
}
}
if((v[s[i] - '0']) == minn) {
int I = s[i] - '0'; flag[i] = true;
for(int j = 0;j <= nc;j++) {
if(i >= pos[j] && i <= pos[j+1]) {
for(int k = nc;k >= j+1;k--) pos[k+1] = pos[k];
pos[j+1] = i;
for(int k = nc;k >= j+1;k--) now[k+1] = now[k];
now[j+1] = i; break;
}
}
}
}
cout << nc;
}
long long ans = 0;
for(int i = 1;i <= n;i++) {
if(flag[i]) continue;
ans += v[s[i] - '0'];
}
long long qq = 0;
for(int i = 1;i <= nc;i++) qq = qq * 10 + now[i];
cout << ans + qq << endl;
}
return 0;
}
TLE 了。