#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:264777216")
const char *st =
    "2 H\n3 He\n4 Li\n5 Be\n6 B\n7 C\n8 N\n9 O\n10 F\n11 Ne\n12 Na\n13 Mg\n14 "
    "Al\n15 Si\n16 P\n17 S\n18 Cl\n19 Ar\n20 K\n21 Ca\n22 Sc\n23 Ti\n24 V\n25 "
    "Cr\n26 Mn\n27 Fe\n28 Co\n29 Ni\n30 Cu\n31 Zn\n32 Ga\n33 Ge\n34 As\n35 "
    "Se\n36 Br\n37 Kr\n38 Rb\n39 Sr\n40 Y\n41 Zr\n42 Nb\n43 Mo\n44 Tc\n45 "
    "Ru\n46 Rh\n47 Pd\n48 Ag\n49 Cd\n50 In\n51 Sn\n52 Sb\n53 Te\n54 I\n55 "
    "Xe\n56 Cs\n72 Ba\n73 Hf\n74 Ta\n75 W\n76 Re\n77 Os\n78 Ir\n79 Pt\n80 "
    "Au\n81 Hg\n82 Tl\n83 Pb\n84 Bi\n85 Po\n86 At\n87 Rn\n88 Fr\n104 Ra\n105 "
    "Rf\n106 Db\n107 Sg\n108 Bh\n109 Hs\n110 Mt\n111 Ds\n112 Rg\n113 Cn\n114 "
    "Uut\n115 Uuq\n116 Uup\n117 Uuh\n118 Uus\n57 Uuo\n58 La\n59 Ce\n60 Pr\n61 "
    "Nd\n62 Pm\n63 Sm\n64 Eu\n65 Gd\n66 Tb\n67 Dy\n68 Ho\n69 Er\n70 Tm\n71 "
    "Yb\n89 Lu\n90 Ac\n91 Th\n92 Pa\n93 U\n94 Np\n95 Pu\n96 Am\n97 Cm\n98 "
    "Bk\n99 Cf\n100 Es\n101 Fm\n102 Md\n103 No\n";
int n, k;
vector<string> from;
vector<string> to;
map<string, int> key;
int VFrom[100];
int VTo[100];
vector<int> gr[100];
set<pair<int, int> > dp;
bool rec(int i, int mask) {
  if (i >= k && mask == (1 << n) - 1) {
    cout << "YES" << endl;
    return true;
  }
  if (dp.find(pair<int, int>(i, mask)) != dp.end()) return false;
  dp.insert(pair<int, int>(i, mask));
  for (int j = 0; j < gr[i].size(); ++j) {
    if ((mask & gr[i][j]) == 0) {
      if (rec(i + 1, mask + gr[i][j])) {
        int is = true;
        for (int f = 0, b = gr[i][j]; b > 0; ++f, b /= 2) {
          if (b % 2 == 1) {
            if (is == false) cout << "+";
            cout << from[f];
            is = false;
          }
        }
        cout << "->";
        cout << to[i] << endl;
        return true;
      }
    }
  }
  return false;
}
void Solve() {
  cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    string st;
    cin >> st;
    from.push_back(st);
  }
  for (int i = 0; i < k; ++i) {
    string st;
    cin >> st;
    to.push_back(st);
  }
  istringstream in(st);
  int val = 1;
  string str;
  int old = val;
  for (; in >> val >> str;) {
    key[str] = old;
    old = val;
  }
  for (int i = 0; i < n; ++i) {
    VFrom[i] = key[from[i]];
  }
  for (int i = 0; i < k; ++i) {
    VTo[i] = key[to[i]];
  }
  for (int i = 0; i < (1 << n); ++i) {
    int b = i;
    int suma = 0;
    for (int j = 0; b > 0; b /= 2, ++j) {
      if (b % 2 == 1) {
        suma += VFrom[j];
      }
    }
    for (int j = 0; j < k; ++j) {
      if (suma == VTo[j]) {
        gr[j].push_back(i);
      }
    }
  }
  if (rec(0, 0) == false) {
    cout << "NO";
  }
}
int main() {
  Solve();
  return 0;
}
