#include <bits/stdc++.h>
const int N = 100010;
const int inf = 0x3f3f3f3f;
using namespace std;
string v[105] = {"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;
vector<int> vt[21];
string sa[21], sb[21];
int a[21], b[21], dp[21][1 << 17];
bool dfs(int l, int s) {
  int &ret = dp[l][s];
  if (ret + 1) return ret;
  if (l == k) {
    if (s == ((1 << n) - 1)) return ret = 1;
    return ret = 0;
  }
  for (int i = 0; i < ((vt[l]).size()); i++) {
    int ss = vt[l][i];
    if (s & ss) continue;
    if (dfs(l + 1, s | ss)) return ret = 1;
  }
  return ret = 0;
}
void display(int l, int s) {
  if (l == k) return;
  for (int i = 0; i < ((vt[l]).size()); i++) {
    int ss = vt[l][i];
    if (s & ss) continue;
    if (dfs(l + 1, s | ss)) {
      for (int j = 0, f = 0; j < n; j++) {
        if (ss & (1 << j)) {
          if (f) cout << "+";
          cout << sa[j];
          f = 1;
        }
      }
      cout << "->" << sb[l] << endl;
      display(l + 1, s | ss);
      break;
    }
  }
}
int main() {
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> sa[i];
    for (int j = 0; j < 100; j++)
      if (sa[i] == v[j]) a[i] = j + 1;
  }
  for (int i = 0; i < k; i++) {
    cin >> sb[i];
    for (int j = 0; j < 100; j++)
      if (sb[i] == v[j]) b[i] = j + 1;
  }
  for (int j = 0; j < 1 << n; j++) {
    int cnt = 0;
    for (int i = 0; i < n; i++)
      if (j & (1 << i)) cnt += a[i];
    for (int i = 0; i < k; i++)
      if (cnt == b[i]) vt[i].push_back(j);
  }
  memset(dp, -1, sizeof(dp));
  if (dfs(0, 0))
    cout << "YES" << endl, display(0, 0);
  else
    cout << "NO" << endl;
  return 0;
}
