#include <iostream>
#include <complex>
#include <cstdio>
#include <cmath>
#include <utility>
#include <vector>
using namespace std;
typedef complex<double> P;
typedef pair<P,P> L;
typedef pair<P,double> C;
typedef vector<P> Poly;
#define X real()
#define Y imag()
#define EPS (1e-10)
#define INF (1e15)
const double pi = acos(-1);

//2D version
namespace std{
  bool operator < (const P& a, const P& b){
    return a.X != b.X ? a.X < b.X : a.Y < b.Y;
  }
  bool operator == (const P& a, const P& b){
    return abs(a-b) < EPS;
  }
}

double dot(P a, P b){
  return a.X * b.X + a.Y * b.Y;
}
double cross(P a, P b){
  return a.X * b.Y - a.Y * b.X;
}

P n_vector(P a){
  return a*P(0,1)/abs(a);
}

vector<P> cpcc(C a, C b){
  //円と円の交点
  double d = abs(a.first-b.first), ra = a.second, rb = b.second;
  double t = (ra*ra-rb*rb+d*d)/2/d, h = sqrt(ra*ra-t*t);
  P m = t/abs(b.first-a.first)*(b.first-a.first)+a.first;
  vector<P> cp(2,m);
  P n = n_vector(a.first-b.first);
  cp[0] -= h*n;
  cp[1] += h*n;
  return cp;
}

int ccw(P a, P b, P c) {
  b -= a; c -= a;
  if( cross(b,c) > EPS ) return +1;
  if( cross(b,c) < -EPS ) return -1;
  if( dot(b,c) < 0 ) return +2;
  if( abs(b) + EPS < abs(c) ) return -2;
  return 0;
}

double common_area(C a, C b){
  //円と円の共通部分の面積
  if(abs(a.first - b.first) < abs(a.second - b.second))
    return min(a.second*a.second, b.second*b.second)*pi;
  if(abs(a.first - b.first) > a.second + b.second) return 0;
  vector<P> cp = cpcc(a,b);
  if(abs(cp[0] - cp[1]) < EPS) return 0;
  double ra = a.second, rb = b.second, theta_a = abs(arg(cp[0] - a.first) - arg(cp[1] - a.first)),
    theta_b = abs(arg(cp[0] - b.first) - arg(cp[1] - b.first)), 
    ret = 0;
  if(ccw(cp[0], cp[1], a.first)*ccw(cp[0], cp[1], b.first) >= 0){
    if(ra < rb){
      theta_a = max(2*pi - theta_a, theta_a);
      theta_b = min(2*pi - theta_b, theta_b);
      ret += 0.5*abs(cross(cp[0] - a.first, cp[1] - a.first)) -
        0.5*abs(cross(cp[0] - b.first, cp[1] - b.first));
    }else{
      theta_a = min(2*pi - theta_a, theta_a);
      theta_b = max(2*pi - theta_b, theta_b);
      ret -= 0.5*abs(cross(cp[0] - a.first, cp[1] - a.first)) -
        0.5*abs(cross(cp[0] - b.first, cp[1] - b.first));
    }
  }else{
    theta_a = min(2*pi - theta_a, theta_a);
    theta_b = min(2*pi - theta_b, theta_b);
    ret -= 0.5*abs(cross(cp[0] - a.first, cp[1] - a.first)) +
      0.5*abs(cross(cp[0] - b.first, cp[1] - b.first));
  }
  return ret + theta_a/2.0*ra*ra + theta_b/2.0*rb*rb;
}

int main(){
  int w, h, a, b, c;
  while(cin >> w >> h >> a >> b >> c, w){
    bool f = false;
    if(a < b){
      swap(a,b);
      f = true;
    }
    double ra = sqrt(a/pi), rb = sqrt(b/pi);
    if(2*ra > min(w, h) + EPS || c > b){
      cout << "impossible" << endl;
      continue;
    }
    P s(ra, ra), t(w - rb, h - rb);
    C ca(s, ra), cb(t, rb);
    if(common_area(ca, cb) > c + EPS){
      cout << "impossible" << endl;
      continue;
    }
    P ok = s, ng = t, m;
    for(int i = 0; i < 1e4; ++i){
      m = (ok + ng)/2.0;
      if(common_area(ca, C(m, rb)) < c) ng = m;
      else ok = m;
    }
    if(f) printf("%.9f %.9f %.9f %.9f %.9f %.9f\n", m.X, m.Y, rb, s.X, s.Y, ra);
    else printf("%.9f %.9f %.9f %.9f %.9f %.9f\n", s.X, s.Y, ra, m.X, m.Y, rb);
  }
  return 0;
}





Measured memory_bytes: 3384