#include <bits/stdc++.h>
using namespace std;
int rk[1015][1015];
int sa[1015][1015];
int tr[1015][1015], tl[1015];
int nx[1015][10];
int w[1015][10];
int ra[1015], rl;
char inp[1015];
int dp[1015][1015];
vector<int> read() {
  scanf("%s", inp);
  int l = strlen(inp);
  vector<int> res(l);
  for (int i = 0; i < l; i++) res[i] = inp[l - 1 - i] - '0';
  return res;
}
int c[10];
int calw(int id, int pl, int num) {
  if (num == 0 && tl[id] <= pl && rl <= pl + 1) return 0;
  return c[num % 10];
}
int main() {
  vector<int> a = read();
  rl = a.size();
  for (int j = 0; j < rl; j++) {
    ra[j] = a[j];
    if (a[j] == '?' - '0') ra[j] = -1;
  }
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    vector<int> b = read();
    tl[i] = b.size();
    for (int j = 0; j < tl[i]; j++) tr[i][j] = b[j];
  }
  for (int i = 0; i < 10; i++) scanf("%d", &c[i]);
  for (int i = 0; i < 1015; i++) {
    vector<pair<int, int> > q;
    for (int j = 0; j < n; j++) {
      int ur = 0;
      if (i) ur = rk[i - 1][j];
      ur = tr[j][i] * (n + 1) + ur;
      q.push_back(make_pair(ur, j));
    }
    sort(q.begin(), q.end());
    for (int j = 0; j < n; j++) sa[i][j] = q[j].second;
    for (int j = 0; j < n;) {
      int k = j;
      while (k < n && q[k].first == q[j].first) k++;
      for (int l = j; l < k; l++) rk[i][q[l].second] = j;
      j = k;
    }
  }
  for (int i = 1015 - 5; i >= 0; i--) {
    for (int j = n; j >= 0; j--) {
      for (int k = 0; k < 10; k++) {
        if (j == n) {
          int ms = n, ws = 0;
          for (int s = 0; s < n; s++) {
            int nq = tr[s][i] + k;
            if (nq >= 10) ms = min(ms, rk[i][s]);
            ws += calw(s, i, nq);
          }
          w[j][k] = ws;
          nx[j][k] = ms;
        } else {
          w[j][k] = w[j + 1][k];
          nx[j][k] = nx[j + 1][k];
          if (i) {
            int nid = sa[i - 1][j];
            int bg = tr[nid][i] + 1 + k;
            if (bg >= 10) nx[j][k] = min(nx[j][k], rk[i][nid]);
            w[j][k] -= calw(nid, i, bg - 1);
            w[j][k] += calw(nid, i, bg);
          }
        }
      }
      for (int k = 0; k < 10; k++) {
        if (i >= rl && k) continue;
        if (i == rl - 1 && (k == 0)) continue;
        if (ra[i] != -1 && (ra[i] != k)) continue;
        dp[i][j] = max(dp[i][j], dp[i + 1][nx[j][k]] + w[j][k]);
      }
    }
  }
  cout << dp[0][n] << endl;
  return 0;
}
