#include <bits/stdc++.h>
using namespace std;
const int maxN = 1005, maxD = 10, oo = 1e9;
int Len, dp[maxN][maxN];
int t[maxN][maxN], s[maxN], tool[maxN];
int n, perm[maxN], cost[maxD], cnt[maxN][maxD], lost[maxN];
bool flag = 0;
inline void solve(int i, int j, int d) {
  int jp = 0, sum = 0;
  for (int d2 = 0; d2 < maxD; d2++) {
    int td = cnt[j][d2];
    int fl = (d + 1 + d2) >= 10;
    jp += fl * td;
    sum += td * cost[(d + 1 + d2) % 10];
    td = cnt[n][d2] - cnt[j][d2];
    if (d2 == 0 && d == 0 && flag) td -= lost[n] - lost[j];
    fl = (d + d2) >= 10;
    jp += fl * td;
    sum += td * cost[(d + d2) % 10];
  }
  dp[i + 1][jp] = max(dp[i + 1][jp], dp[i][j] + sum);
  return;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  string r;
  cin >> r;
  int sz = r.size();
  for (int i = 0; i < sz; i++) {
    if (r[i] == '?')
      s[sz - i - 1] = -1;
    else
      s[sz - i - 1] = r[i] - '0';
  }
  Len = max(Len, sz);
  cin >> n;
  for (int i = 0; i < n; i++) {
    string tmp;
    cin >> tmp;
    int cz = tmp.size();
    for (int j = 0; j < cz; j++) t[i][cz - j - 1] = tmp[j] - '0';
    Len = max(Len, cz);
    tool[i] = cz;
  }
  for (int i = 0; i < maxD; i++) cin >> cost[i];
  dp[0][0] = 0;
  for (int j = 1; j <= n; j++) dp[0][j] = -oo;
  for (int i = 1; i < maxN; i++)
    for (int j = 0; j < maxN; j++) dp[i][j] = -oo;
  for (int i = 0; i < n; i++) perm[i] = i;
  for (int i = 0; i < Len; i++) {
    for (int j = 1; j <= n; j++) {
      for (int d = 0; d < maxD; d++) cnt[j][d] = cnt[j - 1][d];
      int d = t[perm[j - 1]][i];
      cnt[j][d]++;
      lost[j] = lost[j - 1];
      if (tool[perm[j - 1]] <= i) lost[j]++;
    }
    if (i >= sz) flag = true;
    for (int j = 0; j <= n; j++) {
      if (s[i] != -1)
        solve(i, j, s[i]);
      else {
        int st = 0;
        if (i == sz - 1) st = 1;
        for (int d = st; d < maxD; d++) solve(i, j, d);
      }
    }
    vector<int> vc;
    for (int d = maxD - 1; d >= 0; d--)
      for (int j = 0; j < n; j++)
        if (t[perm[j]][i] == d) vc.push_back(perm[j]);
    for (int j = 0; j < n; j++) perm[j] = vc[j];
  }
  int ans = 0;
  for (int j = 0; j <= n; j++) ans = max(ans, dp[Len][j] + j * cost[1]);
  cout << ans << endl;
}
