#include <bits/stdc++.h>
using namespace std;
const int MAX = 3300;
int dna1[MAX],dna2[MAX];
int d[5][5],dp[MAX][MAX][3];
int A,B,m=0,n=0;
unordered_map<char,int> dna{
{'A',1},
{'T',2},
{'G',3},
{'C',4}
};
inline int maxnum(int a,int b,int c)
{
return max(a,max(b,c));
}
main()
{
char ch;
memset(dp,0,sizeof(dp));
while(1)
{
ch = getchar();
if(ch=='\n') break;
dna1[++m] = dna[ch];
}
while(1)
{
ch = getchar();
if(ch=='\n') break;
dna2[++n] = dna[ch];
}
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++) cin>>d[i][j];
}
cin>>A>>B;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j][0] = maxnum(dp[i-1][j-1][0],dp[i-1][j-1][1],dp[i-1][j-1][2])+d[dna1[i]][dna2[j]];
dp[i][j][1] = maxnum(dp[i][j-1][0]-A,dp[i][j-1][1]-B,dp[i][j-1][2]-A);
dp[i][j][2] = maxnum(dp[i-1][j][0]-A,dp[i-1][j][1]-A,dp[i-1][j][2]-B);
}
}
cout<<maxnum(dp[m][n][0],dp[m][n][1],dp[m][n][2])<<endl;
return 0;
}