#include <bits/stdc++.h>
using namespace std;
string mp[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"};
vector<int> ans;
int n, k;
bool flag;
int a[20], t[20];
bool vis[105][150000];
int id(string s) {
  for (int i = 1; i <= 100; i++)
    if (mp[i] == s) return i;
}
void print() {
  int sum = 0, cnt = 0;
  for (int i = 0; i < ans.size(); i++) {
    sum += ans[i];
    cout << mp[ans[i]];
    if (sum == t[cnt]) {
      printf("->");
      cout << mp[t[cnt]];
      cnt++;
      sum = 0;
      printf("\n");
    } else
      printf("+");
  }
  exit(0);
}
void dfs(int cnt, int sum, int s) {
  if (sum == t[cnt]) {
    if (cnt == k) {
      flag = 1;
      printf("YES\n");
      print();
    } else
      dfs(cnt + 1, 0, s);
  }
  if (vis[cnt][s]) return;
  if (sum > t[cnt]) return;
  for (int i = 0; i < n && (!flag); i++) {
    if ((1 << i) & s)
      continue;
    else {
      ans.push_back(a[i]);
      dfs(cnt, sum + a[i], s | (1 << i));
      ans.pop_back();
    }
  }
  vis[cnt][s] = 1;
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 0; i < n; i++) {
    string ch;
    cin >> ch;
    a[i] = id(ch);
  }
  for (int i = 0; i < k; i++) {
    string ch;
    cin >> ch;
    t[i] = id(ch);
  }
  dfs(0, 0, 0);
  printf("NO");
  return 0;
}
