#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:251700000")
using namespace std;
const long long LINF = 9e18;
const int INF = 2e9;
const int M = 1e3 + 5;
int n;
string a, b[M];
int c[M], dp[M][M], zz[M], cc[M][M], pr[M][M], kok[10];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> a;
  reverse((a).begin(), (a).end());
  cin >> n;
  int mx = a.size();
  for (int i = 0; i < n; ++i)
    cin >> b[i], reverse((b[i]).begin(), (b[i]).end()),
        zz[i] = b[i].size(), mx = max(mx, (int)b[i].size());
  for (int i = 0; i < 10; ++i) cin >> c[i];
  for (int i = 10; i < 20; ++i) c[i] = c[i - 10];
  for (int i = 0; i < n; ++i)
    while (b[i].size() <= mx) b[i] += "0";
  for (int i = 0; i <= mx; ++i) {
    for (int i = 0; i < 10; ++i) kok[i] = 0;
    for (int j = 0; j < n; ++j) kok[b[j][i] - '0']++;
    for (int i = 1; i < 10; ++i) kok[i] += kok[i - 1];
    for (int j = n - 1; j >= 0; --j)
      if (i)
        pr[i][--kok[b[pr[i - 1][j]][i] - '0']] = pr[i - 1][j];
      else
        pr[i][--kok[b[j][i] - '0']] = j;
    for (int j = 0; j < n; ++j) cc[i][pr[i][j]] = j;
  }
  for (int i = 0; i <= mx; ++i)
    for (int j = 0; j <= n; ++j) dp[i][j] = -1;
  int xx = a.size();
  while (a.size() <= mx) a += "0";
  for (int i = 0; i <= mx; ++i)
    for (int k = 0; k < 10; ++k) {
      if (a[i] == '?' && i == xx - 1 && !k) continue;
      if (a[i] != '?' && k) continue;
      if (a[i] != '?') k = (a[i] - '0');
      int ans = 0, x = n;
      for (int j = 0; j < n; ++j) {
        if (!(zz[j] <= i && xx <= i)) ans += c[(b[j][i] - '0') + k];
        if ((b[j][i] - '0') + k > 9) x = min(x, cc[i][j]);
      }
      if (!i || dp[i - 1][n] != -1)
        dp[i][x] = max(dp[i][x], (i ? dp[i - 1][n] : 0) + ans);
      if (!i) continue;
      for (int q = n - 1, j; q >= 0; --q) {
        j = pr[i - 1][q];
        if (!(zz[j] <= i && xx <= i)) ans -= c[(b[j][i] - '0') + k];
        ans += c[(b[j][i] - '0') + k + 1];
        if ((b[j][i] - '0') + k + 1 > 9) x = min(x, cc[i][j]);
        if (i && dp[i - 1][q] == -1) continue;
        dp[i][x] = max(dp[i][x], (i ? dp[i - 1][q] : 0) + ans);
      }
    }
  cout << dp[mx][n];
}
