#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 10;
int p[N], cnt;
map<int, int> mp1, mp2;
map<int, int>::iterator it;
int a1, b1, a2, b2;
void init() {
  p[0] = p[1] = 1;
  for (int i = 2; i * i < N; i++) {
    if (p[i]) continue;
    for (int j = i * i; j < N; j += i) p[j] = 1;
  }
  for (int i = 0; i < N; i++)
    if (!p[i]) p[cnt++] = i;
}
void F(int x, map<int, int> &mp) {
  for (int i = 0; i < cnt && p[i] <= x; i++) {
    while (x % p[i] == 0) {
      mp[p[i]]++;
      x /= p[i];
    }
  }
  if (x > 1) mp[x]++;
}
void G(int &a, int &b, int cnt) {
  while (cnt > 0) {
    if (a % 3 == 0) {
      a /= 3;
      a *= 2;
    } else if (b % 3 == 0) {
      b /= 3;
      b *= 2;
    }
    cnt--;
  }
}
void GG(int &a, int &b, int cnt) {
  while (cnt > 0) {
    if (a % 2 == 0) {
      a /= 2;
    } else if (b % 2 == 0) {
      b /= 2;
    }
    cnt--;
  }
}
void doit() {
  map<int, int> mp;
  for (it = mp1.begin(); it != mp1.end(); it++) {
    int x = it->first, y = it->second;
    mp[it->first] += it->second;
  }
  for (it = mp2.begin(); it != mp2.end(); it++) {
    mp[it->first] -= it->second;
    int x = it->first, y = it->second;
  }
  for (it = mp.begin(); it != mp.end(); it++) {
    int x = it->first, y = it->second;
    if (x > 3 && y) {
      puts("-1");
      return;
    }
  }
  int ans = 0;
  if (mp1[3] >= mp2[3]) {
    int x = mp1[3] - mp2[3];
    mp1[2] += x;
    G(a1, b1, x);
    ans += x;
  } else {
    int x = mp2[3] - mp1[3];
    mp2[2] += x;
    G(a2, b2, x);
    ans += x;
  }
  if (mp1[2] >= mp2[2]) {
    int x = mp1[2] - mp2[2];
    ans += x;
    GG(a1, b1, x);
  } else {
    int x = mp2[2] - mp1[2];
    ans += x;
    GG(a2, b2, x);
  }
  cout << ans << endl;
  cout << a1 << " " << b1 << endl;
  cout << a2 << " " << b2 << endl;
}
int main() {
  init();
  while (cin >> a1 >> b1 >> a2 >> b2) {
    mp1.clear();
    F(a1, mp1);
    F(b1, mp1);
    mp2.clear();
    F(a2, mp2);
    F(b2, mp2);
    doit();
  }
  return 0;
}
