#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int s = 0;
  bool f = 0;
  char ch = ' ';
  while (!isdigit(ch)) {
    f |= (ch == '-');
    ch = getchar();
  }
  while (isdigit(ch)) {
    s = (s << 3) + (s << 1) + (ch ^ 48);
    ch = getchar();
  }
  return (f) ? (-s) : (s);
}
inline void write(int x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x < 10) {
    putchar(x + '0');
    return;
  }
  write(x / 10);
  putchar((x % 10) + '0');
}
const int N = 18;
string S[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"};
bool jyl = 0;
int n, m, a[N], b[N], bin[N], f[1 << N], dp[1 << N], from[1 << N];
vector<int> wwx[N];
inline int ask(string t) {
  int i;
  for (i = 1; i <= 100; i++)
    if (S[i] == t) return i;
}
int main() {
  int i, j, sa = 0, sb = 0, now, tmp, pos;
  string ss;
  n = read();
  m = read();
  for (i = 1; i <= n; i++) {
    cin >> ss;
    a[i] = ask(ss);
    sa += a[i];
  }
  for (i = 1; i <= m; i++) {
    cin >> ss;
    b[i] = ask(ss);
    sb += b[i];
  }
  bin[0] = 1;
  for (i = 1; i <= 20; i++) bin[i] = bin[i - 1] << 1;
  if (sa == sb) {
    for (i = 0; i < bin[n]; i++) {
      f[i] = 0;
      for (j = 1; j <= n; j++)
        if (bin[j - 1] & i) f[i] += a[j];
    }
    dp[0] = 0;
    for (i = 1; i < bin[n]; i++) {
      dp[i] = -1;
      for (j = i; j; j = (j - 1) & i) {
        if ((dp[i ^ j] != -1) && (b[dp[i ^ j] + 1] == f[j])) {
          dp[i] = dp[i ^ j] + 1;
          from[i] = j;
        }
      }
    }
    if (dp[bin[n] - 1] == m) {
      jyl = 1;
      now = bin[n] - 1;
      pos = m;
      while (now) {
        tmp = from[now];
        for (i = 1; i <= n; i++)
          if (bin[i - 1] & tmp) {
            wwx[pos].push_back(i);
          }
        now -= tmp;
        pos--;
      }
    }
  }
  if (jyl) {
    puts("YES");
    for (i = 1; i <= m; i++) {
      cout << S[a[wwx[i][0]]];
      for (j = 1; j < (int)wwx[i].size(); j++) cout << '+' << S[a[wwx[i][j]]];
      putchar('-');
      putchar('>');
      cout << S[b[i]] << endl;
    }
  } else {
    puts("NO");
  }
  return 0;
}
