#include<bits/stdc++.h>
#define double long double
#define int128 __int128
#define int long long
#define re register
#define in inline
#define Pi pair<int,int>
#define vi vector<int>
#define max(a,b) ((a)>(b)?a:b)
#define min(a,b) ((a)<(b)?a:b)
#define ls x<<1
#define rs x<<1|1
#define dx x+xx[i]
#define dy y+yy[i]
#define debug cout<<"wuyu"<<endl;
#define s1 b1[i].id[0]
#define s2 b2[j].id[0]
using namespace std;
const int INF=0x3f3f3f3f3f;
const int N=1e5+19;
const int M=1e6+10;
const int mod=998244353;
const double eps=1e-5;
in int read(){ re int x=0,f=0;re char c=getchar(); while(!isdigit(c)) f|=(c=='-'),c=getchar(); while(isdigit(c)) x=(x<<3)+(x<<1)+c-'0',c=getchar(); return f?-x:x;}
in void write(re int x){ if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0');}
int n,m;
int s,t;
struct edge{
int u,v,w;
int nx;
}e[M];
int head[N],cur[M],tot=0;
int dep[N];
int xu1,xu2;
struct node{
int h;
string id;
}b1[101],b2[101];
in void add(re int u,re int v,re int w){
e[++tot].u=u;
e[tot].v=v;
e[tot].w=w;
e[tot].nx=head[u];
head[u]=tot;
}
in bool bfs(){
memset(dep,0,sizeof(dep));
queue<int>q;
while(!q.empty()) q.pop();
dep[s]=1;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
for(re int i=head[u];i!=-1;i=e[i].nx){
int v=e[i].v;
if(e[i].w>0&&dep[v]==0){
dep[v]=dep[u]+1;
if(v==t) return 1;
q.push(v);
}
}
}
return 0;
}
int dfs(re int u,re int dis){
if(u==t) return dis;
int diss=0;
for(re int i=head[u];i!=-1;i=e[i].nx){
int v=e[i].v;
if(e[i].w!=0&&dep[v]==dep[u]+1){
int flow=dfs(v,min(dis,e[i].w));
if(flow){
dis-=flow;
diss+=flow;
e[i].w-=flow;
e[i^1].w+=flow;
if(dis==0) break;
}
}
}
return diss;
}
in int dinic(){
int ans=0;
while(bfs()){
for(re int i=s;i<=t;i++){
cur[i]=head[i];
while(int dadada=dfs(s,INF)){
ans+=dadada;
}
}
}
return ans;
}
in int pd1(int x){
if(b1[x].id[0]=='J') return xu1;
else return 0;
}
in int pd2(int x){
if(b2[x].id[0]=='J') return xu2;
else return 0;
}
signed main(){
memset(head,0xff,sizeof(head));
n=read();m=read();
for(re int i=1;i<=n;i++) cin>>b1[i].id;
for(re int i=1;i<=n;i++) cin>>b2[i].id;
for(re int i=1;i<=n;i++) cin>>b1[i].h;
for(re int i=1;i<=n;i++) cin>>b2[i].h;
for(re int i=1;i<=n;i++){
if(b1[i].id[0]=='Y') xu1++;
if(b2[i].id[0]=='Y') xu2++;
}
s=0;t=2*n+1;
for(re int i=1;i<=n;i++){
for(re int j=1;j<=n;j++){
if(s1=='J'&&(s2=='H'||s2=='W')) add(i,j+n,1),add(j+n,i,0);
if(s1=='E'&&(s2=='J'||s2=='Y')) add(i,j+n,1),add(j+n,i,0);
if(s1=='Y'&&(s2=='J'||s2=='H')) add(i,j+n,1),add(j+n,i,0);
if(s1=='H'&&(s2=='E'||s2=='W')) add(i,j+n,1),add(j+n,i,0);
if(s1=='W'&&(s2=='Y'||s2=='E')) add(i,j+n,1),add(j+n,i,0);
}
}
for(re int i=1;i<=n;i++){
add(s,i,b1[i].h+pd1(i));
add(i,s,0);
add(i+n,t,b2[i].h+pd2(i));
add(t,i+n,0);
}
cout<<min(dinic(),m)<<endl;
return 0;
}