#include <bits/stdc++.h>
using namespace std;
int dx[]{1, -1, 0, 0, 1, -1, 1, -1};
int dy[]{0, 0, 1, -1, 1, -1, -1, 1};
const int size = 10000007;
int ar[size], A[size], B[size], inA[size], inB[size];
void cal() {
  for (long long i = 2; i < size; i++) {
    if (ar[i] == 0) {
      for (int j = i; j < size; j += i) ar[j] = i;
    }
  }
}
int main() {
  int n, m, t;
  cal();
  while (cin >> n >> m) {
    for (int i = 0; i < n; i++) {
      scanf("%d", &t);
      inA[i] = t;
      while (t > 1) A[ar[t]]++, t /= ar[t];
    }
    for (int i = 0; i < m; i++) {
      scanf("%d", &t);
      inB[i] = t;
      while (t > 1) B[ar[t]]++, t /= ar[t];
    }
    vector<long long> Aa, Ba, AA, BB;
    for (int i = 2; i < size; i++) {
      int dif = abs(A[i] - B[i]);
      if (A[i] > B[i]) {
        A[i] = dif;
        B[i] = 0;
      } else if (A[i] < B[i]) {
        B[i] = dif;
        A[i] = 0;
      } else
        A[i] = B[i] = 0;
    }
    for (int i = 0; i < n; i++) {
      long long tmp = 1;
      while (inA[i] > 1) {
        if (A[ar[inA[i]]] > 0) A[ar[inA[i]]]--, tmp *= ar[inA[i]];
        inA[i] /= ar[inA[i]];
      }
      inA[i] = tmp;
    }
    for (int i = 0; i < m; i++) {
      long long tmp = 1;
      while (inB[i] > 1) {
        if (B[ar[inB[i]]] > 0) B[ar[inB[i]]]--, tmp *= ar[inB[i]];
        inB[i] /= ar[inB[i]];
      }
      inB[i] = tmp;
    }
    cout << n << " " << m << endl;
    for (int i = 0; i < n; i++) cout << inA[i] << " ";
    cout << endl;
    for (int i = 0; i < m; i++) cout << inB[i] << " ";
    cout << endl;
  }
  return 0;
}
