#include <bits/stdc++.h> #include <iostream> #include <algorithm> #include <vector> #include <map> using namespace std; #define pb push_back #define mp make_pair #define INF 1e18 #define mod 1000000007 #define eps 1e-6 #define abs(x) ((x)>=0?(x):-(x)) #define y1 solai #define fi first #define se second typedef long long ll; void read(ll &x) { scanf("%lld",&x); } void read(ll &x, ll &y) { scanf("%lld%lld",&x,&y); } void read(ll &x, ll &y, ll &z) { scanf("%lld%lld%lld",&x,&y,&z); } void print(ll x) { printf("%lld ",x); } void println(ll x) { printf("%lld\n",x); } const ll N=100; ll n,q,a[N+10],b[10][N+10],d[20][1<<19],sum[10],ch,ans,len; char st[111111]; int main() { //freopen("c.cpp","r",stdin); cin>>n>>q; for(ll i=0;i<n;i++) read(a[i]); for(ll i=0;i<n;i++) { scanf("\n%s",st); len=strlen(st); for(ll j=0;j<len;j++) b[st[j]-48][i]++; } for(ll i=0;i<n;i++) { ch=1; for(ll j=0;j<10;j++) if(b[j][i]>q) ch=0; if(!ch) continue; d[i][1<<i]=a[i]; ans=max(ans,a[i]); } for(ll i=0;i<(1<<n);i++) { for(ll j=0;j<10;j++) sum[j]=0; for(ll j=0;j<n;j++) if((i>>j)&1) for(ll k=0;k<10;k++) sum[k]+=b[k][j]; ch=1; for(ll j=0;j<10;j++) if(sum[j]>q) ch=0; if(!ch) continue; for(ll j=0;j<n;j++) if((i>>j)&1) { for(ll k=0;k<n;k++) if(k!=j&&((i>>k)&1)) d[j][i]=max(d[j][i],d[k][i^(1<<j)]+(a[j]^a[k])), ans=max(ans,d[j][i]); } } cout<<ans; }