#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-4;
double W, H, A, B, AB;
double RA, RB;
bool equals(double a, double b) { return abs(a - b) < eps; }
double dot(complex<double> a, complex<double> b) {
  return a.real() * b.real() + a.imag() * b.imag();
}
double cross(complex<double> a, complex<double> b) {
  return a.real() * b.imag() - a.imag() * b.real();
}
double getAngle(complex<double> a, complex<double> b) {
  double v = dot(a, b) / (abs(a) * abs(b));
  if (v > 1.0) return 0;
  if (v < -1.0) return M_PI;
  return acos(v);
}
vector<complex<double> > getCrossP(complex<double> p1, double r1,
                                   complex<double> p2, double r2) {
  double ll = norm(p1 - p2);
  double A = (r1 * r1 - r2 * r2 + ll) / (2.0 * ll);
  complex<double> base = p2 - p1;
  complex<double> n(-base.imag(), base.real());
  n /= abs(n);
  double h = sqrt(r1 * r1 - A * A * ll);
  vector<complex<double> > v;
  v.push_back(p1 + A * base - h * n);
  v.push_back(p1 + A * base + h * n);
  return v;
}
double getAngleVector(complex<double> a, complex<double> b) {
  double A = arg(a);
  double B = arg(b);
  double rad = B - A;
  rad = fmod(rad, M_PI * 2.0);
  if (rad < 0.0) rad += M_PI * 2.0;
  return rad;
}
double getArea(complex<double> a, complex<double> b) {
  double d = abs(b - a);
  if (d + eps > RA + RB) return 0.0;
  if (d < abs(RA - RB) + eps) return min(A, B);
  vector<complex<double> > v = getCrossP(a, RA, b, RB);
  double a1 = getAngleVector(v[0] - a, v[1] - a) * RA * RA / 2.0;
  double a2 = cross(v[0] - a, v[1] - a) / 2.0;
  double b1 = getAngleVector(v[1] - b, v[0] - b) * RB * RB / 2.0;
  double b2 = cross(v[1] - b, v[0] - b) / 2.0;
  return a1 - a2 + b1 - b2;
}
int main() {
  while (cin >> W >> H >> A >> B >> AB) {
    if (W == 0 && H == 0 && A == 0 && B == 0 && AB == 0) break;
    bool flag = false;
    if (A < B) {
      flag = true;
      swap(A, B);
    }
    RA = sqrt(A / M_PI);
    RB = sqrt(B / M_PI);
    if (RA * 2 > min(W, H) + eps) {
      cout << "impossible" << endl;
      continue;
    }
    complex<double> base =
        complex<double>(W - RB, H - RB) - complex<double>(RA, RA);
    double D = abs(base);
    double low = 0, high = D;
    while (!equals(low, high)) {
      double d = (low + high) / 2.0;
      complex<double> a(RA, RA);
      complex<double> b = a + base * d / abs(base);
      double area = getArea(a, b);
      if (area < AB + eps)
        high = d;
      else
        low = d;
    }
    complex<double> a(RA, RA);
    complex<double> b = a + base * high / abs(base);
    if (!equals(getArea(a, b), AB)) {
      cout << "impossible" << endl;
    } else {
      if (flag) {
        swap(a, b);
        swap(RA, RB);
      }
      printf("%.10f %.10f %.10f %.10f %.10f %.10f\n", a.real(), a.imag(), RA,
             b.real(), b.imag(), RB);
    }
  }
  return 0;
}
