#include <bits/stdc++.h>
using namespace std;
long long a[2], b[2];
long long s1, s2;
set<pair<long long, long long> > past;
long long lmin(long long arg1, long long arg2) {
  if (arg1 == -1) return arg2;
  if (arg2 == -1) return arg1;
  if (arg1 <= arg2) return arg1;
  return arg2;
}
long long check(long long rec1, long long rec2, long long num) {
  if (rec1 == rec2 && s1 + s2 < rec1 + rec2) {
    s1 = rec1;
    s2 = rec2;
    return num;
  }
  pair<long long, long long> temp;
  temp.first = rec1;
  temp.second = rec2;
  if (past.find(temp) != past.end()) {
    return -1;
  }
  long long ret = -1;
  if (rec1 > rec2) {
    if (rec1 % 2 == 0) ret = lmin(ret, check(rec1 / 2, rec2, num + 1));
    if (rec1 % 3 == 0) ret = lmin(ret, check(2 * rec1 / 3, rec2, num + 1));
  } else {
    if (rec2 % 2 == 0) ret = lmin(ret, check(rec1, rec2 / 2, num + 1));
    if (rec2 % 3 == 0) ret = lmin(ret, check(rec1, 2 * rec2 / 3, num + 1));
  }
  past.insert(temp);
  return ret;
}
int main() {
  cin >> a[0] >> b[0];
  cin >> a[1] >> b[1];
  long long num = check(a[0] * b[0], a[1] * b[1], 0);
  if (num == -1) {
    cout << "-1" << endl;
    return 0;
  }
  while (s1 < a[0] * b[0]) {
    if (a[0] * b[0] % (2 * s1) == 0) {
      if (a[0] % 2 == 0)
        a[0] /= 2;
      else
        b[0] /= 2;
    } else {
      if (a[0] % 3 == 0)
        a[0] = 2 * a[0] / 3;
      else
        b[0] = 2 * b[0] / 3;
    }
  }
  while (s2 < a[1] * b[1]) {
    if (a[1] * b[1] % (2 * s2) == 0) {
      if (a[1] % 2 == 0)
        a[1] /= 2;
      else
        b[1] /= 2;
    } else {
      if (a[1] % 3 == 0)
        a[1] = 2 * a[1] / 3;
      else
        b[1] = 2 * b[1] / 3;
    }
  }
  cout << num << endl;
  cout << a[0] << " " << b[0] << endl;
  cout << a[1] << " " << b[1] << endl;
  return 0;
}
