#include <bits/stdc++.h>
using namespace std;
int n, m, i, lp[10000001], a[100500][25], b[100500][25], k, x, ap[10000000],
    bp[10000001], j, q, pr[10000001], kol = 0;
void step1() {
  for (i = 2; i <= 10000000; i++) {
    if (lp[i] == 0) {
      lp[i] = i;
      pr[++kol] = i;
    }
    for (j = 1; j <= kol && pr[j] <= lp[i] && i * pr[j] <= 10000000; j++)
      lp[i * pr[j]] = pr[j];
  }
}
void step2() {
  while (x != 1) {
    a[i][++k] = lp[x];
    ap[lp[x]]++;
    x = x / lp[x];
  }
}
void step3() {
  while (x != 1) {
    b[i][++k] = lp[x];
    bp[lp[x]]++;
    x = x / lp[x];
  }
}
int main() {
  scanf("%d%d\n", &n, &m);
  step1();
  for (i = 1; i <= n; i++) {
    scanf("%d", &x);
    k = 0;
    step2();
    if (i == 348) {
      i = i;
    }
  }
  for (i = 1; i <= m; i++) {
    scanf("%d", &x);
    k = 0;
    step3();
  }
  printf("%d %d\n", n, m);
  for (i = 1; i <= n; i++) {
    q = 1;
    for (j = 1; a[i][j] != 0; j++)
      if (bp[a[i][j]] > 0)
        bp[a[i][j]]--;
      else
        q *= a[i][j];
    printf("%d ", q);
  }
  printf("\n");
  for (i = 1; i <= m; i++) {
    q = 1;
    for (j = 1; b[i][j] != 0; j++)
      if (ap[b[i][j]] > 0)
        ap[b[i][j]]--;
      else
        q *= b[i][j];
    printf("%d ", q);
  }
  return 0;
}
