#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<cstdlib>#include<stack>#include<queue>#include<vector>#include<set>#include<map>#include<algorithm>using namespace std;typedef long long LL;map<char, int> mp;string s1, s2;const int N = 2010;int dp[N][N];int fun(){ memset(dp, 0, sizeof(dp)); int len1 = s1.length(), len2 = s2.length(); for(int i = 1; i <= len1; i++) { for(int j = 1; j <= len2; j++) { if(s1[i-1] == s2[j-1]) dp[i][j] = dp[i-1][j-1] + mp[s1[i-1]]; else dp[i][j] = max(dp[i-1][j], dp[i][j-1]); } } return dp[len1][len2];}int main(){ int n, val; char ch; while(cin >> n) { mp.clear(); for(int i = 0; i < n; i++) { cin >> ch >> val; mp[ch] = val; } cin >> s1 >> s2; cout << fun() << endl; } return 0;}