#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const int maxn = 25;
string chemical[105] = {
    "FUCKYOU", "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, m, val[maxn], id[maxn], tot[1 << 19], dp[maxn][1 << 19];
string s;
int solve(int x, int mask) {
  if (dp[x][mask] != -1) return dp[x][mask];
  dp[x][mask] = -2;
  if (x == 0 && tot[mask] == id[x]) return dp[x][mask] = mask;
  for (int i = mask; i > 0; i = (i - 1) & mask) {
    if (tot[i] == id[x]) {
      int tran = solve(x - 1, mask ^ i);
      if (tran >= 0) {
        dp[x][mask] = i;
        break;
      }
    }
  }
  return dp[x][mask];
}
void react(int from, int to) {
  int cnt = 0;
  for (int i = 0; i < n; i++)
    if (from & (1 << i)) {
      if (cnt == 0)
        printf("%s", chemical[val[i]].c_str());
      else
        printf("+%s", chemical[val[i]].c_str());
      cnt++;
    }
  printf("->%s", chemical[to].c_str());
  puts("");
  return;
}
void record(int x, int mask) {
  react(dp[x][mask], id[x]);
  if (x == 0) return;
  record(x - 1, mask ^ dp[x][mask]);
  return;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    cin >> s;
    for (int j = 1; j <= 100; j++)
      if (s == chemical[j]) {
        val[i] = j;
        break;
      }
  }
  for (int i = 0; i < m; i++) {
    cin >> s;
    for (int j = 1; j <= 100; j++)
      if (s == chemical[j]) {
        id[i] = j;
        break;
      }
  }
  for (int mask = 0; mask < (1 << n); mask++) {
    int sum = 0;
    for (int i = 0; i < n; i++)
      if (mask & (1 << i)) sum += val[i];
    tot[mask] = sum;
  }
  memset(dp, -1, sizeof(dp));
  int ret = solve(m - 1, (1 << n) - 1);
  if (ret < 0) {
    puts("NO");
    return 0;
  }
  puts("YES");
  record(m - 1, (1 << n) - 1);
  return 0;
}
