import itertools
n = int(input())
s = input()
chars = int(input())
costs = dict()

wildcards = 0
for i in s:
  if i == '?':
    wildcards += 1

for i in range(chars):
  ch, c = input().split(' ')
  c = int(c)
  costs[ch] = c

def getPropDivisors(n):
  res = list()
  for i in range(1, n+1):
    if n % i == 0:
      res += [i]
  return res

def countCost(n, s, costs):
  res = 0
  for div in getPropDivisors(n):
    for start in range(div):
      chars = set()
      curAdd = 0
      for i in range(start, start+n, div):
        curAdd += costs[s[i%n]]
        chars |= {s[i]}

      if len(chars) == 1:
        res += curAdd

  return res


def fillString(s, wilds):
  res = ""
  idx = 0
  for i in range(len(s)):
    if s[i] == '?':
      #s[i] = wilds[idx]
      res += wilds[idx]
      idx += 1
    else:
      res += s[i]
  return res
  
best = 0
for i in itertools.product(costs.keys(), repeat=wildcards):
  best = max(best, countCost(n, fillString(s, i), costs))

print(best)
