#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e3+5;
int A,B;
string a,b;
int d[5][5];
int dp[N][N][3];
int ls(int k)
{
return k?-A:-B;
}
int turn(char s)
{
switch(s)
{
case 'A': return 1;
case 'T': return 2;
case 'G': return 3;
default: return 4;
}
}
signed main()
{
cin>>a>>b;
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
cin>>d[i][j];
cin>>A>>B;
int n=a.size(),m=b.size();
a=' '+a,b=' '+b;
dp[1][0][2]=dp[0][1][1]=-A;
for(int i=2;i<=n;i++) dp[i][0][2]=dp[i-1][0][2]-B;
for(int i=2;i<=m;i++) dp[0][i][1]=dp[0][i-1][1]-B;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dp[i][j][0]=max(dp[i-1][j-1][0],max(dp[i-1][j-1][1],dp[i-1][j-1][2]))+d[turn(a[i])][turn(b[j])];
dp[i][j][1]=max(max(dp[i][j-1][0],dp[i][j-1][2])+ls(1),dp[i][j-1][1]+ls(0));
dp[i][j][2]=max(max(dp[i-1][j][0],dp[i-1][j][1])+ls(1),dp[i-1][j][2]+ls(0));
}
}
cout<<max(dp[n][m][0],max(dp[n][m][1],dp[n][m][2]))<<'\n';
return 0;
}