#include <bits/stdc++.h>
using namespace std;
struct choco {
  long long x, y;
  int op;
  choco(long long xx = 0, long long yy = 0, int opp = 0) {
    x = xx;
    y = yy;
    op = opp;
  }
};
struct dupla {
  long long x, y;
  dupla(long long xx = 0, long long yy = 0) {
    x = xx;
    y = yy;
  }
};
bool operator<(dupla a, dupla b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
}
bool operator<(choco a, choco b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
}
map<long long, choco>::iterator it;
map<long long, choco>::iterator it2;
map<long long, choco> area1;
map<long long, choco> area2;
map<dupla, int> c1;
map<dupla, int> c2;
void dec(long long x, long long y, int op) {
  if (area1.count(x * y)) {
    if (op < (area1[x * y]).op) area1[x * y] = choco(x, y, op);
    if (c1.count(dupla(x, y)) == 0)
      c1[dupla(x, y)] = op;
    else if (op < c1[dupla(x, y)]) {
      c1[dupla(x, y)] = op;
      if (x % 2 == 0) dec(x / 2, y, op + 1);
      if (y % 2 == 0) dec(x, y / 2, op + 1);
      if ((x * 2) % 3 == 0) dec((x * 2) / 3, y, op + 1);
      if ((y * 2) % 3 == 0) dec(x, (y * 2) / 3, op + 1);
    }
  } else {
    area1[x * y] = choco(x, y, op);
    c1[dupla(x, y)] = op;
    if (x % 2 == 0) dec(x / 2, y, op + 1);
    if (y % 2 == 0) dec(x, y / 2, op + 1);
    if ((x * 2) % 3 == 0) dec((x * 2) / 3, y, op + 1);
    if ((y * 2) % 3 == 0) dec(x, (y * 2) / 3, op + 1);
  }
}
void dec2(long long x, long long y, int op) {
  if (area2.count(x * y)) {
    if (op < (area2[x * y]).op) area2[x * y] = choco(x, y, op);
    if (c2.count(dupla(x, y)) == 0)
      c2[dupla(x, y)] = op;
    else if (op < c2[dupla(x, y)]) {
      c2[dupla(x, y)] = op;
      if (x % 2 == 0) dec2(x / 2, y, op + 1);
      if (y % 2 == 0) dec2(x, y / 2, op + 1);
      if ((x * 2) % 3 == 0) dec2((x * 2) / 3, y, op + 1);
      if ((y * 2) % 3 == 0) dec2(x, (y * 2) / 3, op + 1);
    }
  } else {
    area2[x * y] = choco(x, y, op);
    c2[dupla(x, y)] = op;
    if (x % 2 == 0) dec2(x / 2, y, op + 1);
    if (y % 2 == 0) dec2(x, y / 2, op + 1);
    if ((x * 2) % 3 == 0) dec2((x * 2) / 3, y, op + 1);
    if ((y * 2) % 3 == 0) dec2(x, (y * 2) / 3, op + 1);
  }
}
int main() {
  long long a, b, c, d;
  cin >> a >> b >> c >> d;
  dec(a, b, 0);
  dec2(c, d, 0);
  choco ans1, ans2;
  int min = INT_MAX;
  for (it = area1.begin(); it != area1.end(); it++) {
    if (area2.count(it->first)) {
      int aux = (area2[it->first]).op + (it->second).op;
      if (aux < min) {
        min = aux;
        ans1 = it->second;
        ans2 = area2[it->first];
      }
    }
  }
  if (min == INT_MAX)
    cout << "-1\n";
  else {
    cout << min << endl;
    cout << ans1.x << " " << ans1.y << endl;
    cout << ans2.x << " " << ans2.y << endl;
  }
}
