#include <bits/stdc++.h>
using namespace std;
string che[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 wgt[1 << 17];
int f[1 << 17];
int n, k;
int a[17], b[17];
int main() {
  cin >> n >> k;
  for (int(i) = 0; (i) < (n); ++(i)) {
    string t;
    cin >> t;
    a[i] = find(che, che + 101, t) - che;
  }
  for (int(i) = 0; (i) < (k); ++(i)) {
    string t;
    cin >> t;
    b[i] = find(che, che + 101, t) - che;
  }
  memset(f, -1, sizeof(f));
  f[0] = 0;
  for (int(i) = 0; (i) < (1 << n); ++(i)) {
    int sum = 0;
    for (int(j) = 0; (j) < (n); ++(j))
      if (i & (1 << j)) sum += a[j];
    wgt[i] = sum;
    int pos = 0;
    int tot = 0;
    while (tot < sum) tot += b[pos++];
    if (tot == sum)
      for (int sub = i; sub; sub = (sub - 1) & i)
        if (wgt[sub] == b[pos - 1] && f[i - sub] != -1) {
          f[i] = sub;
          break;
        }
  }
  int mask = (1 << n) - 1;
  if (f[mask] == -1) {
    cout << "NO\n";
    return 0;
  }
  cout << "YES\n";
  int pos = k - 1;
  while (mask) {
    int sub = f[mask];
    bool was = 0;
    for (int(i) = 0; (i) < (n); ++(i))
      if (sub & (1 << i)) {
        if (!was)
          was = 1;
        else
          cout << "+";
        cout << che[a[i]];
      }
    cout << "->";
    cout << che[b[pos--]] << endl;
    mask -= sub;
  }
}
