#include<algorithm>
#include<iostream>
#include<string.h>
#include<cstdio>
#include<vector>
#include<cmath>
#include<queue>
#include<map>
#include<set>
using namespace std;
#define int long long
#define repu(i,u) for(int i=(h[u]);i;i=(ne[i]))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define xx return
const int N=1e6+10;
int c,T;
int v[10];
int cnt[10];
int ans=1e18;
struct A{
int id[N];
}Num[15];
int va[10];
int idx[10];
void compute(int a,int b,int c,int d,int e)
{
int now=0;
rep(i,1,9)va[i]=idx[i]=0;
if(a)va[++now]=a;
if(b)va[++now]=b;
if(c)va[++now]=c;
if(d)va[++now]=d;
if(e)va[++now]=e;
if(!a&&!b&&!c&&!d&&!e)xx;
rep(i,1,now)idx[va[i]]++;
rep(i,1,9)if(idx[i]>cnt[i])xx;
int the_end=0;
rep(i,1,now)
{
if(the_end>=Num[va[i]].id[cnt[va[i]]])xx;
the_end=upper_bound(Num[va[i]].id+1,Num[va[i]].id+1+cnt[va[i]],the_end)-Num[va[i]].id;
}
int pre=0,sum=0;
rep(i,1,now)pre=va[i]+pre*10;
rep(i,1,9)sum+=v[i]*(cnt[i]-idx[i]);
ans=min(ans,pre+sum);
xx;
}
void solve()
{
ans=1e18;
string s;
cin>>s;
int len=s.size();
s=" "+s;
rep(i,1,9)scanf("%lld",&v[i]);
rep(i,1,9)cnt[i]=0;
int k=len;
rep(i,1,len)
{
int now=s[i]-'0';
++cnt[now];
Num[now].id[cnt[now]]=i;
}
rep(a,0,9)
rep(b,0,9)
rep(c,0,9)
rep(d,0,9)
rep(e,0,9){
compute(a,b,c,d,e);
}
printf("%lld\n",ans);
xx;
}
signed main()
{
//freopen("bargain2.in","r",stdin);
scanf("%lld%lld",&c,&T);
while(T--)solve();
xx 0;
}
1—9 wa 求调