#include <bits/stdc++.h>
using namespace std;
bool f1(pair<long long, long long> x, pair<long long, long long> y) {
  return x.first < y.first;
}
bool f2(pair<long long, long long> x, pair<long long, long long> y) {
  return x.first > y.first;
}
bool f3(long long x, long long y) { return x > y; }
long long gcd(long long x, long long y) {
  if (x == 0) return y;
  return gcd(y % x, x);
}
long long powmod(long long x, long long y, long long m) {
  if (y == 0) return 1;
  long long p = powmod(x, y / 2, m) % m;
  p = (p * p) % m;
  return (y % 2 == 0) ? p : (x * p) % m;
}
long long modif(long long x, long long m) { return (powmod(x, m - 2, m)); }
bool fa(vector<long long> x, vector<long long> y) { return x[0] < y[0]; }
bool fs(vector<long long> x, vector<long long> y) {
  return x.size() > y.size();
}
long long spf[10000001];
long long h[10000001] = {0}, j[10000001] = {0};
void prim(long long x) {
  while (x != 1) {
    h[spf[x]]++;
    x /= spf[x];
  }
}
void pri(long long x) {
  while (x != 1) {
    j[spf[x]]++;
    x /= spf[x];
  }
}
long long ren(long long x) {
  map<long long, long long> a;
  while (x != 1) {
    a[spf[x]]++;
    x /= spf[x];
  }
  long long r = 1;
  for (auto xx : a) {
    long long x = xx.first;
    long long y = min(xx.second, h[x]);
    h[x] -= y;
    long long z = pow(x, y);
    r *= z;
  }
  return r;
}
long long meow(long long x) {
  map<long long, long long> a;
  while (x != 1) {
    a[spf[x]]++;
    x /= spf[x];
  }
  long long r = 1;
  for (auto xx : a) {
    long long x = xx.first;
    long long y = min(xx.second, j[x]);
    j[x] -= y;
    long long z = pow(x, y);
    r *= z;
  }
  return r;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n, m;
  cin >> n >> m;
  spf[0] = 1;
  spf[1] = 1;
  for (long long i = 2; i < 10000001; i++) {
    spf[i] = i;
  }
  for (long long i = 2; i < 10000001; i++) {
    if (spf[i] != i) continue;
    for (long long t = i * i; t < 10000001; t += i) {
      spf[t] = i;
    }
  }
  long long nu[n], de[m];
  for (int i = 0; i < n; i++) {
    long long x;
    cin >> x;
    prim(x);
    nu[i] = x;
  }
  for (int i = 0; i < m; i++) {
    long long x;
    cin >> x;
    pri(x);
    de[i] = x;
  }
  long long k1 = 1, k2 = 1;
  for (int i = 2; i < 10000001; i++) {
    long long k = j[i];
    j[i] = j[i] - min(j[i], h[i]);
    h[i] = h[i] - min(k, h[i]);
  }
  for (int i = 0; i < n; i++) {
    nu[i] = ren(nu[i]);
  }
  for (int i = 0; i < m; i++) {
    de[i] = meow(de[i]);
  }
  cout << n << " " << m << "\n";
  for (auto x : nu) {
    cout << x << " ";
  }
  cout << "\n";
  for (auto x : de) cout << x << " ";
  return 0;
}
