wa on #1--13
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+100;
int C,T,len;
char s[12][N];
int v[12],pos[11],ne[N][10],cnt[11];
int cntt[11],bb[11];
void work(){
int limit,ans=-1;
if(len<=6){
limit=0;
for(int i=1;i<=len;i++) limit=limit*10+(s[T][i]-'0');
ans=limit;
// cout<<limit<<" sdf"<<endl;
}
for(int ii=1;ii<=999999;ii++){
memset(cntt,0,sizeof(cntt));
int x=ii,flag=0; bb[0]=0;
while(x){
int d=x%10; x/=10;
cntt[d]++,bb[++bb[0]]=d;
if(!d){flag=1;break;}
}
if(flag) continue;
int now; flag=0;
for(int i=bb[0];i>=1;i--){
if(i==bb[0]) now=pos[bb[i]];
else now=ne[now][bb[i]];
if(!now){flag=1;break;}
}
if(flag) continue;
int res=0;
for(int i=1;i<=9;i++) res+=v[i]*(cnt[i]-cntt[i]);
ans=(ans==-1?res+ii:min(ans,res+ii));
}
cout<<ans<<endl;
return;
}
signed main(){
cin>>C>>T;
while(T--){
memset(ne,0,sizeof(ne)),memset(cnt,0,sizeof(cnt)),memset(pos,0,sizeof(pos));
scanf("%s",s[T]+1); len=strlen(s[T]+1);
for(int i=1;i<=9;i++) scanf("%lld",&v[i]);
for(int i=len;i>=1;i--){
for(int k=1;k<=9;k++) ne[i][k]=pos[s[T][i]-'0'];
pos[s[T][i]-'0']=i;
cnt[s[T][i]-'0']++;
}
work();
}
return 0;
}