#include <bits/stdc++.h>
using namespace std;
constexpr int TSZ = 110;
constexpr int N = 20;
string table[TSZ] = {
    "",   "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, k, from[N], to[N], subsum[1 << N], dp[1 << N], par[1 << N];
int atomic_num(string &s) {
  return distance(table, find(table, table + TSZ, s));
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    from[i] = atomic_num(s);
  }
  for (int i = 0; i < k; i++) {
    string s;
    cin >> s;
    to[i] = atomic_num(s);
  }
  for (int mask = 1; mask < (1 << n); mask++) {
    for (int i = 0; i < n; i++) {
      if (mask & (1 << i)) {
        subsum[mask] += from[i];
      }
    }
  }
  for (int mask = 1; mask < (1 << n); mask++) {
    for (int submask = mask; submask > 0; submask = (submask - 1) & mask) {
      if (dp[mask ^ submask] < k && subsum[submask] == to[dp[mask ^ submask]] &&
          dp[mask ^ submask] + 1 > dp[submask]) {
        dp[mask] = dp[mask ^ submask] + 1;
        par[mask] = mask ^ submask;
      }
    }
  }
  int used = -1;
  for (int mask = 1; used == -1 && mask < (1 << n); mask++) {
    if (dp[mask] == k) {
      used = mask;
    }
  }
  if (used != -1) {
    cout << "YES\n";
    while (used > 0) {
      vector<string> taken;
      int submask = used ^ par[used];
      for (int i = 0; i < n; i++) {
        if (submask & (1 << i)) {
          taken.push_back(table[from[i]]);
        }
      }
      for (int i = 0; i < taken.size(); i++) {
        if (i != 0) {
          cout << "+";
        }
        cout << taken[i];
      }
      cout << "->" << table[subsum[submask]] << "\n";
      used = par[used];
    }
  } else {
    cout << "NO\n";
  }
  return 0;
}
