#include <bits/stdc++.h>
using namespace std;
vector<int> primo;
unordered_map<int, int> pos;
const int LIM = 1e7;
bool prime[LIM] = {};
void fill() {
  primo.push_back(2);
  pos[2] = 0;
  for (int i = 3; i < LIM; i += 2) {
    if (prime[i] == 0) {
      pos[i] = primo.size();
      primo.push_back(i);
      if (i <= LIM / i) {
        for (int j = i * i; j < LIM; j += (i << 1)) prime[j] = 1;
      }
    }
  }
}
const int TAM = 664579;
vector<int> num, den;
int freqn[TAM] = {};
int freqd[TAM] = {};
void decomp(int inc) {
  int a;
  cin >> a;
  if (a == 1) return;
  if (inc == 1)
    num.push_back(a);
  else
    den.push_back(a);
  for (int i = 0; primo[i] <= a / primo[i]; i++) {
    while (a % primo[i] == 0) {
      if (inc == 1)
        freqn[i]++;
      else
        freqd[i]++;
      a /= primo[i];
    }
    if (prime[a] == 0) {
      if (a > 1) {
        if (inc == 1)
          freqn[pos[a]]++;
        else
          freqd[pos[a]]++;
      }
      return;
    }
  }
  if (a > 1) {
    if (inc == 1)
      freqn[pos[a]]++;
    else
      freqd[pos[a]]++;
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  fill();
  int N, M;
  cin >> N >> M;
  while (N--) {
    decomp(1);
  }
  while (M--) {
    decomp(-1);
  }
  for (int i = 0; i < TAM; i++) {
    freqn[i] = min(freqn[i], freqd[i]);
    freqd[i] = freqn[i];
  }
  if (num.size() == 0) num.push_back(1);
  if (den.size() == 0) den.push_back(1);
  cout << num.size() << ' ' << den.size() << '\n';
  for (int u : num) {
    int a = u;
    for (int i = 0; primo[i] <= u / primo[i]; i++) {
      while (u % primo[i] == 0) {
        u /= primo[i];
        if (freqn[i] > 0) {
          freqn[i]--;
          a /= primo[i];
        }
      }
      if (prime[u] == 0) break;
    }
    if (u > 1) {
      if (freqn[pos[u]] > 0) {
        freqn[pos[u]]--;
        a /= u;
      }
    }
    cout << a << ' ';
  }
  cout << '\n';
  for (int u : den) {
    int a = u;
    for (int i = 0; primo[i] <= u / primo[i]; i++) {
      while (u % primo[i] == 0) {
        u /= primo[i];
        if (freqd[i] > 0) {
          freqd[i]--;
          a /= primo[i];
        }
      }
      if (prime[u] == 0) break;
    }
    if (u > 1) {
      if (freqd[pos[u]] > 0) {
        freqd[pos[u]]--;
        a /= u;
      }
    }
    cout << a << ' ';
  }
  cout << '\n';
  return 0;
}
