#include <bits/stdc++.h>
const double pi = acos(-1.0), eps = 1e-9;
const int dx[8] = {1, -1, 0, 0, 1, 1, -1, -1};
const int dy[8] = {0, 0, 1, -1, 1, -1, -1, 1};
const int MO = (int)(1e9 + 7);
using namespace std;
int a[1000001], b[1000001], n, m;
int now1[1000001], now2[1000001], num1[1000001], num2[1000001];
bool f[1000001];
int p[1000001], pnum;
map<int, int> S1, S2, S3, S4;
void GETP(int MAXN) {
  memset(f, 1, sizeof(f));
  f[0] = f[1] = false;
  p[pnum = 1] = 2;
  for (int now = 2; now < MAXN;) {
    for (int j = now + now; j <= MAXN; j += now) f[j] = false;
    for (++now; now < MAXN && !f[now]; ++now)
      ;
    if (f[now]) p[++pnum] = now;
  }
}
int f1[1000001], f2[1000001];
int main() {
  GETP(3200);
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    int t;
    scanf("%d", &t);
    a[i] = t;
    for (int j = 1; j <= pnum; j++)
      while (t % p[j] == 0) ++num1[j], t /= p[j];
    f1[i] = t;
    if (t != 1) S1[t]++;
  }
  for (int i = 1; i <= m; i++) {
    int t;
    scanf("%d", &t);
    b[i] = t;
    for (int j = 1; j <= pnum; j++)
      while (t % p[j] == 0) ++num2[j], t /= p[j];
    f2[i] = t;
    if (t != 1) S2[t]++;
  }
  for (int i = 1; i <= pnum; i++) {
    now1[i] = min(num1[i], num2[i]);
    now2[i] = now1[i];
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= pnum; j++)
      while (now1[j] > 0 && a[i] % p[j] == 0) a[i] /= p[j], --now1[j];
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= pnum; j++)
      while (now2[j] > 0 && b[i] % p[j] == 0) b[i] /= p[j], --now2[j];
  printf("%d %d\n", n, m);
  for (int i = 1; i <= n; i++)
    if (f1[i] != 1) {
      S3[f1[i]] = min(S1[f1[i]], S2[f1[i]]);
      S4[f1[i]] = min(S1[f1[i]], S2[f1[i]]);
    }
  for (int i = 1; i <= n; i++)
    if (f1[i] != 1) {
      int a = S3[f1[i]];
      if (a > 0) ::a[i] /= f1[i];
      --S3[f1[i]];
    }
  for (int i = 1; i <= m; i++)
    if (f2[i] != 1 && S4.count(f2[i])) {
      int a = S4[f2[i]];
      if (a > 0) b[i] /= f2[i];
      --S4[f2[i]];
    }
  for (int i = 1; i <= n; i++) printf("%d ", a[i]);
  puts("");
  for (int i = 1; i <= m; i++) printf("%d ", b[i]);
  puts("");
}
