#include using namespace std; using lld = long long; lld val[26]; lld sol(const string& s, lld p) { if(s.length() == 1) return (s[0] == '?' ? *max_element(val,val+26) : val[s[0]-'A']); lld res = 0; for(int i=0;i<26;i++) { bool ok = true; for(char c : s) if(!(c == '?' || c == 'A'+i)){ ok = false; break; } if(ok) { lld sum = 0; int n = s.length(); while(n > 0) sum += (lld) s.length() * val[i], n /= p; res = max(res, sum); } } lld sum = 0; vector t(p,""); for(int i=0;i> n >> s; lld k; cin >> k; for(lld i=0;i> a >> b; val[a-'A'] = b; } lld p = 2; if(n == 1) p = 1; else while(n%p != 0) p++; cout << sol(s,p) << "\n"; return 0; }