#include <bits/stdc++.h>
using namespace std;
const int MAXN = 20;
const string E[101] = {
    "",   "H",  "He", "Li", "Be", "B",  "C",  "N",  "O",  "F",  "Ne", "Na",
    "Mg", "Al", "Si", "P",  "S",  "Cl", "Ar", "K",  "Ca", "Sc", "Ti", "V",
    "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br",
    "Kr", "Rb", "Sr", "Y",  "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag",
    "Cd", "In", "Sn", "Sb", "Te", "I",  "Xe", "Cs", "Ba", "La", "Ce", "Pr",
    "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu",
    "Hf", "Ta", "W",  "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", "Pb", "Bi",
    "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th", "Pa", "U",  "Np", "Pu", "Am",
    "Cm", "Bk", "Cf", "Es", "Fm"};
int n, m, sum[1 << 18], f[18][1 << 18], seq[MAXN];
struct element {
  string name;
  int mass;
} a[MAXN], b[MAXN];
vector<int> method[101];
void getMass(element &v) {
  for (int i = 1; i <= 100; i++)
    if (E[i] == v.name) {
      v.mass = i;
      return;
    }
  printf("Can't find element.\n");
}
void dfs(int x, int S) {
  if (x == 0) return;
  if (x) dfs(x - 1, f[x][S]);
  int now = S - f[x][S];
  int tot = 0;
  for (int i = 0; i < n; i++)
    if ((now >> i) & 1) seq[++tot] = i + 1;
  for (int i = 1; i < tot; i++) cout << a[seq[i]].name << "+";
  cout << a[seq[tot]].name << "->";
  cout << b[x].name << endl;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) cin >> a[i].name;
  for (int i = 1; i <= m; i++) cin >> b[i].name;
  for (int i = 1; i <= n; i++) getMass(a[i]);
  for (int i = 1; i <= m; i++) getMass(b[i]);
  for (int i = 0; i < (1 << n); i++) {
    sum[i] = 0;
    for (int j = 0; j < n; j++)
      if ((i >> j) & 1) sum[i] += a[j + 1].mass;
    if (sum[i] <= 100) method[sum[i]].push_back(i);
  }
  memset(f, -1, sizeof(f));
  f[0][0] = 0;
  for (int i = 0; i < m; i++)
    for (int j = 0; j < (1 << n); j++)
      if (f[i][j] >= 0) {
        int mass = b[i + 1].mass;
        for (int k = 0, to = method[mass].size() - 1; k <= to; k++)
          if ((method[mass][k] & j) == 0) f[i + 1][method[mass][k] | j] = j;
      }
  if (f[m][(1 << n) - 1] == -1)
    printf("NO\n");
  else {
    printf("YES\n");
    dfs(m, (1 << n) - 1);
  }
  return 0;
}
