#include <bits/stdc++.h>
using namespace std;
const int maxn = 1 << 19;
const int maxm = 31;
int f[maxn], w[maxn], before[maxn];
string na[maxm], nb[maxm];
int a[maxm], b[maxm];
int n, k;
int main() {
  string name[] = {"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"};
  map<string, int> quality;
  for (int i = 0; i <= 99; i++) quality[name[i]] = i + 1;
  scanf("%d%d", &n, &k);
  string str;
  for (int i = 1; i <= n; i++) {
    cin >> na[i];
    a[i] = quality[na[i]];
  }
  for (int i = 1; i <= k; i++) {
    cin >> nb[i];
    b[i] = quality[nb[i]];
  }
  memset(f, 255, sizeof(f));
  f[0] = 0;
  int fstate = (1 << n) - 1;
  int finals = -1;
  for (int state = 0; state <= fstate; state++) {
    int p = state;
    for (int i = 1; i <= n; i++) {
      if (p % 2) w[state] += a[i];
      p /= 2;
    }
  }
  for (int state = 0; state <= fstate; state++) {
    if (f[state] >= 0) {
      if (f[state] == k) finals = state;
      int sub = fstate - state;
      for (int tem = sub; tem; tem = (tem - 1) & sub)
        if (w[tem] == b[f[state] + 1]) {
          f[state + tem] = f[state] + 1;
          before[state + tem] = state;
        }
    }
  }
  if (finals == -1)
    puts("NO");
  else {
    puts("YES");
    int tem = finals;
    int bef = before[finals];
    for (int i = k; i >= 1; i--) {
      int x = tem - bef;
      bool first = true;
      for (int j = 1; j <= n; j++) {
        if (x % 2) {
          if (first)
            first = false;
          else
            printf("+");
          cout << na[j];
        }
        x /= 2;
      }
      printf("->");
      cout << nb[i] << endl;
      tem = bef;
      bef = before[tem];
    }
  }
  fclose(stdin);
  return 0;
}
