#include <bits/stdc++.h>
using namespace std;
stringstream ss;
const long double EPS = 1e-8, INF = 1e12;
template <typename T>
int sig(T a, T b = 0) {
  return a < b - EPS ? -1 : a > b + EPS ? 1 : 0;
}
template <typename T>
bool eq(T a, T b) {
  return sig(abs(a - b)) == 0;
}
template <typename T>
long double norm(T a) {
  return a * a;
}
long double cross(const complex<long double>& a,
                  const complex<long double>& b) {
  return imag(conj(a) * b);
}
long double dot(const complex<long double>& a, const complex<long double>& b) {
  return real(conj(a) * b);
}
int ccw(const complex<long double>& a, complex<long double> b,
        complex<long double> c) {
  b -= a;
  c -= a;
  if (cross(b, c) > 0) return +1;
  if (cross(b, c) < 0) return -1;
  if (dot(b, c) < 0) return +2;
  if (norm(b) < norm(c)) return -2;
  return 0;
}
long double pfmod(long double v, long double M = 2 * M_PI) {
  return fmod(fmod(v, M) + M, M);
}
long double AbsArg(long double a) {
  long double ret = pfmod(max(a, -a), 2);
  return min(ret, 2 * M_PI - ret);
}
namespace std {
bool operator<(const complex<long double>& a, const complex<long double>& b) {
  return a.real() != b.real() ? a.real() < b.real() : a.imag() < b.imag();
}
bool operator==(const complex<long double>& a, const complex<long double>& b) {
  return eq(a, b);
}
};  // namespace std
struct L : public vector<complex<long double> > {
  L(const complex<long double>& a, const complex<long double>& b) {
    push_back(a);
    push_back(b);
  }
};
bool isIntersectSS(const L& s, const L& t) {
  return ccw(s[0], s[1], t[0]) * ccw(s[0], s[1], t[1]) <= 0 &&
         ccw(t[0], t[1], s[0]) * ccw(t[0], t[1], s[1]) <= 0;
}
struct C {
  complex<long double> o;
  long double r;
  C(const complex<long double>& o, long double r) : o(o), r(r) {}
};
int IINF = 1 << 28;
enum RELATION { INCOMPARABLE = 0, SAME = 1, CONTAIN = 2, OVER = 4 };
pair<RELATION, int> cRel(const C& c1, const C& c2) {
  long double d = abs(c1.o - c2.o), rd = c1.r - c2.r;
  if (eq(c1.o, c2.o) && eq(c1.r, c2.r)) return make_pair(SAME, IINF);
  if (sig(d, rd) < 0) return make_pair(OVER, 0);
  if (sig(d, rd) == 0) return make_pair(OVER, 1);
  if (sig(d, -rd) < 0) return make_pair(CONTAIN, 0);
  if (sig(d, -rd) == 0) return make_pair(CONTAIN, 1);
  if (sig(d, c1.r + c2.r) < 0) return make_pair(INCOMPARABLE, 2);
  if (sig(d, c1.r + c2.r) == 0) return make_pair(INCOMPARABLE, 1);
  return make_pair(INCOMPARABLE, 0);
}
long double cc_area(const C& c1, const C& c2) {
  pair<RELATION, int> rel = cRel(c1, c2);
  long double d = abs(c1.o - c2.o);
  if (rel.second == 0) return 0.0;
  if (rel.first != INCOMPARABLE) {
    long double r = min(c1.r, c2.r);
    return r * r * M_PI;
  }
  long double rlcosA = (d * d + c1.r * c1.r - c2.r * c2.r) / (2 * d);
  long double A = acos(rlcosA / c1.r), B = acos((d - rlcosA) / c2.r);
  return c1.r * c1.r * A + c2.r * c2.r * B - d * c1.r * sin(A);
}
long double getD(long double Ar, long double Br, long double AB) {
  C cA(complex<long double>(0, 0), Ar);
  long double ld = 0, rd = 1e10;
  while (rd - ld > 1e-5) {
    long double md = (ld + rd) / 2;
    C cB(complex<long double>(md, 0), Br);
    if (cc_area(cA, cB) <= AB) {
      rd = md;
    } else {
      ld = md;
    }
  }
  return ld;
}
int main() {
  ss << fixed << setprecision(20);
  cout << fixed << setprecision(20);
  cerr << fixed << setprecision(20);
  while (true) {
    long double W, H, A, B, AB;
    cin >> W >> H >> A >> B >> AB;
    if (W == 0 && H == 0 && A == 0 && B == 0 && AB == 0) break;
    double Ar = sqrt(A / M_PI), Br = sqrt(B / M_PI);
    bool swaped = false;
    if (Ar < Br) {
      swap(Ar, Br);
      swaped = true;
    }
    double d = getD(Ar, Br, AB);
    if (W - Ar - Br < EPS || H - Ar - Br < EPS) {
      cout << "impossible" << endl;
      continue;
    }
    double Md = hypot(W - Ar - Br, H - Ar - Br);
    if (d > Md + EPS) {
      cout << "impossible" << endl;
      continue;
    }
    C cA = C(complex<long double>(Ar, Ar), Ar),
      cB = C(complex<long double>(
                 Ar + d * cos(atan((H - (Ar + Br)) / (W - (Ar + Br)))),
                 Ar + d * sin(atan((H - (Ar + Br)) / (W - (Ar + Br))))),
             Br);
    if (swaped) swap(cA, cB);
    cout << cA.o.real() << " " << cA.o.imag() << " " << cA.r;
    cout << " " << cB.o.real() << " " << cB.o.imag() << " " << cB.r;
    cout << endl;
  }
  return 0;
}
