#include <bits/stdc++.h>
using namespace std;
int n, len, cnt, rankk[2020], RANK[2020], h[2020], num[2020], dp[2020][2020],
    c[15], ans;
char st[2020];
int a[2020], b[2020][2020], l[2020], S[2020];
inline void solve(int x, int val) {
  int maxx = 0, sum = 0;
  for (int i = 1; i <= n; i++) {
    num[i] = b[i][x] + val;
    if (num[i] >= 10) maxx = max(maxx, h[i]);
    sum += c[num[i] % 10];
  }
  for (int i = 0; i <= n; i++) {
    if (i) {
      sum -= c[num[rankk[i]] % 10];
      num[rankk[i]]++;
      sum += c[num[rankk[i]] % 10];
    }
    if (num[rankk[i]] >= 10) maxx = max(maxx, h[rankk[i]]);
    if (dp[x - 1][i] == -1) continue;
    dp[x][maxx] = max(dp[x][maxx], dp[x - 1][i] + sum);
  }
}
int main() {
  scanf("%s", st + 1);
  len = strlen(st + 1);
  for (int i = 1; i <= len; i++)
    if (st[i] != '?')
      a[len - i + 1] = st[i] - '0';
    else
      a[len - i + 1] = -1;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%s", st + 1);
    l[i] = strlen(st + 1);
    for (int j = 1; j <= l[i]; j++) b[i][l[i] - j + 1] = st[j] - '0';
  }
  for (int i = 0; i <= 9; i++) scanf("%d", &c[i]);
  memset(dp, -1, sizeof(dp));
  dp[0][0] = 0;
  for (int i = 1; i <= n; i++) rankk[i] = i;
  for (int i = 1; i <= len; i++) {
    cnt = 0;
    for (int j = 9; j >= 0; j--) {
      for (int k = 1; k <= n; k++)
        if (b[rankk[k]][i] == j) RANK[++cnt] = rankk[k];
    }
    for (int j = 1; j <= n; j++) h[RANK[j]] = j;
    if (a[i] != -1)
      solve(i, a[i]);
    else {
      if (i != len) solve(i, 0);
      for (int j = 1; j <= 9; j++) solve(i, j);
    }
    for (int j = 1; j <= n; j++) rankk[j] = RANK[j];
  }
  int sum = 0;
  for (int i = 1; i <= n; i++) {
    if (l[rankk[i]] <= len) continue;
    for (int j = len + 1; j <= l[rankk[i]]; j++)
      S[rankk[i]] += c[b[rankk[i]][j]];
    sum += S[rankk[i]];
  }
  int ans = 0;
  for (int i = 0; i <= n; i++) {
    if (i) {
      sum -= S[rankk[i]];
      b[rankk[i]][len + 1]++;
      for (int j = len + 1; j <= 1000; j++)
        b[rankk[i]][j + 1] += b[rankk[i]][j] / 10, b[rankk[i]][j] %= 10;
      int L = 1001;
      while (!b[rankk[i]][L]) L--;
      l[rankk[i]] = L;
      for (int j = len + 1; j <= L; j++) sum += c[b[rankk[i]][j]];
    }
    if (dp[len][i] != -1) ans = max(ans, dp[len][i] + sum);
  }
  printf("%d\n", ans);
}
