#include <bits/stdc++.h>
using namespace std;
const string A[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, k;
map<string, int> MT;
vector<int> V1;
vector<int> V2;
map<int, vector<int>> M;
pair<bool, string> DP[17][1 << 17];
bool was[17][1 << 17];
pair<bool, string> f(int p, int S = 0) {
  if (p == k) return make_pair(true, "");
  if (was[p][S]) return DP[p][S];
  pair<bool, string> res = make_pair(false, "");
  map<int, vector<int>>::iterator it = M.find(V2[p]);
  if (it != M.end())
    for (int i = 0; i < it->second.size(); i++)
      if ((S & it->second[i]) == 0) {
        res = f(p + 1, S + it->second[i]);
        if (res.first) {
          string tmp;
          for (int j = 0, k = it->second[i]; k; j++, k >>= 1)
            if (k & 1) tmp += A[V1[j]] + '+';
          tmp.resize(tmp.length() - 1);
          res.second = '\n' + tmp + "->" + A[V2[p]] + res.second;
          break;
        }
      }
  DP[p][S] = res;
  was[p][S] = true;
  return res;
}
int main() {
  cin >> n >> k;
  for (int i = 1; i <= 100; i++) MT[A[i]] = i;
  V1.resize(n);
  for (int i = 0; i < n; i++) {
    string tmp;
    cin >> tmp;
    V1[i] = MT[tmp];
  }
  sort(V1.begin(), V1.end());
  V2.resize(k);
  for (int i = 0; i < k; i++) {
    string tmp;
    cin >> tmp;
    V2[i] = MT[tmp];
  }
  sort(V2.begin(), V2.end());
  for (int i = 0; i < k; i++) M[V2[i]];
  for (int i = 1; i < (1 << n); i++) {
    int S = 0;
    for (int j = 0, k = i; k; j++, k >>= 1)
      if (k & 1) S += V1[j];
    if (M.find(S) != M.end()) M[S].push_back(i);
  }
  pair<bool, string> res = f(0);
  res.first ? cout << "YES" << res.second : cout << "NO";
  return 0;
}
