#include <bits/stdc++.h>
using namespace std;
map<string, int> mp;
string arr[] = {"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"};
string ar[17];
string ar2[17];
char dp[1 << 17][17];
int n, k;
int cnt1 = 0;
vector<string> pr;
bool solve(int bitmask, int sumsofar, int cnt) {
  if (sumsofar > 100) return 0;
  if (cnt == k) return 1;
  if (dp[bitmask][cnt] != -1) {
    return dp[bitmask][cnt];
  }
  if (mp[ar2[cnt]] == sumsofar) {
    return solve(bitmask, 0, cnt + 1);
  }
  if (__builtin_popcount(bitmask) == n) return 0;
  bool e = false;
  for (int i = n - 1; i >= 0; i--) {
    if ((bitmask & (1 << i)) == 0) {
      e |= solve(bitmask | (1 << i), sumsofar + mp[ar[i]], cnt);
    }
  }
  return dp[bitmask][cnt] = e;
}
void print_soln(int bitmask, int sumsofar, int cnt) {
  if (sumsofar > 100) return;
  if (cnt == k) return;
  if (mp[ar2[cnt]] == sumsofar) {
    int i = cnt1;
    for (; i < pr.size() - 1; i++) cout << pr[i] << "+";
    cout << pr[i] << "->" << ar2[cnt] << endl;
    cnt1 = pr.size();
    print_soln(bitmask, 0, cnt + 1);
    return;
  }
  if (__builtin_popcount(bitmask) == n) return;
  bool e = false;
  for (int i = n - 1; i >= 0; i--) {
    if ((bitmask & (1 << i)) == 0 &&
        dp[(bitmask & (1 << i))][cnt] == e |
            solve(bitmask | (1 << i), sumsofar + mp[ar[i]], cnt)) {
      pr.push_back(ar[i]);
      print_soln(bitmask | (1 << i), sumsofar + mp[ar[i]], cnt);
      break;
    }
  }
}
int main() {
  memset(dp, -1, sizeof dp);
  cin >> n >> k;
  for (int i = 0; i < n; i++) cin >> ar[i];
  for (int i = 0; i < k; i++) cin >> ar2[i];
  for (int i = 1; i <= 100; i++) mp[arr[i - 1]] = i;
  if (solve(0, 0, 0) == 1) {
    cout << "YES\n";
    print_soln(0, 0, 0);
  } else
    cout << "NO\n";
  return 0;
}
