#include <bits/stdc++.h>
using namespace std;
const long long ms = 1e7 + 1, mx = 1e5 + 5;
int n, m;
vector<int> prime;
bool notPrime[ms];
int num[ms], dem[ms];
int arr[mx], brr[mx];
vector<int> fact(int x) {
  vector<int> ans;
  return ans;
}
int main() {
  prime.push_back(2);
  for (int i = 4; i < ms; i += 2) {
    notPrime[i] = true;
  }
  for (long long i = 3; i < ms; i += 2) {
    if (!notPrime[i]) {
      prime.push_back(i);
      for (long long j = i * i; j < ms; j += i + i) {
        notPrime[j] = true;
      }
    }
  }
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; ++i) {
    scanf("%d", arr + i);
    if (arr[i] == 1) continue;
    int idx = 0, pf = prime[idx];
    int save = arr[i];
    while (pf * pf <= save) {
      while (save % pf == 0) {
        save /= pf;
        num[pf]++;
      }
      pf = prime[++idx];
    }
    if (save != 1) {
      num[save]++;
    }
  }
  for (int i = 0; i < m; ++i) {
    scanf("%d", brr + i);
    if (brr[i] == 1) continue;
    int idx = 0, pf = prime[idx];
    int save = brr[i];
    while (pf * pf <= save) {
      while (save % pf == 0) {
        save /= pf;
        dem[pf]++;
      }
      pf = prime[++idx];
    }
    if (save != 1) {
      dem[save]++;
    }
  }
  for (int j = 0; j < prime.size(); ++j) {
    int i = prime[j];
    int kap = min(dem[i], num[i]);
    dem[i] = kap;
    num[i] = kap;
  }
  printf("%d %d\n", n, m);
  for (int i = 0; i < n; ++i) {
    int idx = 0, pf = prime[idx];
    int save = 1;
    while (pf * pf <= arr[i]) {
      while (arr[i] % pf == 0) {
        arr[i] /= pf;
        if (num[pf] <= 0) {
          save *= pf;
        }
        num[pf]--;
      }
      idx++;
      pf = prime[idx];
    }
    if (arr[i] != 1) {
      if (num[arr[i]] <= 0) save *= arr[i];
      num[arr[i]]--;
    }
    printf("%d ", save);
  }
  printf("\n");
  for (int i = 0; i < m; ++i) {
    int idx = 0, pf = prime[idx];
    int save = 1;
    while (pf * pf <= brr[i]) {
      while (brr[i] % pf == 0) {
        brr[i] /= pf;
        if (dem[pf] <= 0) {
          save *= pf;
        }
        dem[pf]--;
      }
      idx++;
      pf = prime[idx];
    }
    if (brr[i] != 1) {
      if (dem[brr[i]] <= 0) save *= brr[i];
      dem[brr[i]]--;
    }
    printf("%d ", save);
  }
  printf("\n");
  return 0;
}
