#include using namespace std; const int N = 1e5 + 5; int n, k, a[N], p, price[30], st, num[30]; long long dp[N][20][30]; int main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin >>n; for (int i = 2; i <= n; ++i){ if (n % i == 0){ p = i; break; } } { st = 1; int s = p; while (s < n){ s *= p; st++; } } { string s; cin >>s; cin >>k; for (int i = 1; i <= k; ++i){ char x; cin >>x>>price[i]; num[x - 'A'] = i; } for (int i = 1; i <= n; ++i){ if (s[i - 1] == '?')a[i] = 0;else a[i] = num[s[i - 1] - 'A']; for (int j = 1; j <= k; ++j){ if (a[i] == 0 || a[i] == j)dp[i][0][j] = price[j]; if (a[i] != 0 && a[i] != j)dp[i][0][j] = -1; dp[i][0][0] = max(dp[i][0][0], dp[i][0][j]); } } } int m = n; int s = 1; for (int j = 1; j <= st; ++j){ m /= p; s *= p; for (int i = 1; i <= m; ++i){ for (int c = 1; c <= k; ++c){ for (int l = i; l <= n; l += m){ if (dp[l][j - 1][c] == -1){ dp[i][j][c] = -1; break; } dp[i][j][c] += dp[l][j - 1][c]; } if (dp[i][j][c] != -1){ dp[i][j][c] += 1ll * price[c] * s; } //cout <