#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template <class T, class U>
ostream& operator<<(ostream& o, const pair<T, U>& p) {
  o << "(" << p.first << "," << p.second << ")";
  return o;
}
template <class T>
ostream& operator<<(ostream& o, const vector<T>& v) {
  o << "[";
  for (T t : v) {
    o << t << ",";
  }
  o << "]";
  return o;
}
const double EPS = 1e-9;
const double INF = 1e9;
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();
}
int ccw(complex<double> a, complex<double> b, complex<double> c) {
  b -= a;
  c -= a;
  if (cross(b, c) > EPS) return +1;
  if (cross(b, c) < -EPS) return -1;
  if (dot(b, c) < -EPS) return +2;
  if (norm(b) < norm(c)) return -2;
  return 0;
}
const double pi = acos(-1);
double areaCC(complex<double> a, double ar, complex<double> b, double br) {
  double d = abs(a - b);
  if (ar + br - d <= EPS) {
    return 0.0;
  } else if (d - abs(ar - br) <= EPS) {
    double r = min(ar, br);
    return r * r * pi;
  } else {
    double rc = (d * d + ar * ar - br * br) / (2 * d);
    double theta = acos(rc / ar);
    double phi = acos((d - rc) / br);
    return ar * ar * theta + br * br * phi - d * ar * sin(theta);
  }
}
double find_R(double area) { return sqrt(area / pi); }
int uw, uh, A, B, AandB;
void solve() {
  double ra = find_R(A), rb = find_R(B);
  bool flg = false;
  if (A < B) {
    flg = true;
    swap(ra, rb);
    swap(A, B);
  }
  if (2 * ra > min(uw, uh)) {
    printf("impossible\n");
    return;
  }
  complex<double> p_a(ra, ra), p_b(uw - rb, uh - rb);
  double dx = p_b.real() - p_a.real(), dy = p_b.imag() - p_a.imag();
  double D = sqrt(dx * dx + dy * dy);
  dx /= D;
  dy /= D;
  auto calc_area = [&](complex<double> q) { return areaCC(p_a, ra, q, rb); };
  double l = 0, r = D;
  for (int(loop) = 0; (loop) < (int)(80); ++(loop)) {
    double m = (l + r) / 2;
    complex<double> cand(p_a.real() + dx * m, p_a.imag() + dy * m);
    if (calc_area(cand) <= AandB)
      r = m;
    else
      l = m;
  }
  p_b = complex<double>(p_a.real() + dx * l, p_a.imag() + dy * l);
  if ((abs((calc_area(p_b)) - (AandB)) < EPS)) {
    if (flg) {
      swap(p_a, p_b);
      swap(ra, rb);
    }
    printf("%.10f %.10f %.10f %.10f %.10f %.10f\n", p_a.real(), p_a.imag(), ra,
           p_b.real(), p_b.imag(), rb);
  } else
    printf("impossible\n");
}
int main() {
  while (cin >> uw >> uh >> A >> B >> AandB, uw) solve();
  return 0;
}
