#include<bits/stdc++.h>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define HUGE_NUM 99999999999999999
#define MOD 1000000007
//#define EPS 0.000000001
using namespace std;


#define EPS 0.00000001

struct Point{
	Point(double arg_x,double arg_y){
		x = arg_x;
		y = arg_y;
	}

	Point(){
		x = y = 0.0;
	}

	Point operator + (Point p){ return Point(x+p.x,y+p.y); }
	Point operator - (Point p){ return Point(x-p.x,y-p.y);}
	Point operator * (double a){ return Point(a*x,a*y); }
	Point operator / (double a){ return Point(x/a,y/a); }

	double abs(){ return sqrt(norm()); }
	double norm(){ return x*x + y*y; }

	bool operator<(const Point &p) const{
		return x != p.x? x < p.x: y < p.y;
	}

	bool operator == (const Point &p) const{
		return fabs(x-p.x) < EPS && fabs(y-p.y) < EPS;
	}

	double x,y;
};

struct Circle{
	void set(double arg_x,double arg_y,double arg_r){
		center.x = arg_x;
		center.y = arg_y;
		r = arg_r;
	}

	Point center;
	double r;
};



typedef vector<Point> Polygon;
typedef Point Vector;

int U_W,U_H,S_A,S_B,S_AB;


double Heron(double a,double b,double c){

	double s = (a+b+c)/2;

	return sqrt(s*(s-a)*(s-b)*(s-c));
}

double calc_S(Circle A,Circle B){

	double dist = sqrt((A.center.x-B.center.x)*(A.center.x-B.center.x)+
			(A.center.y-B.center.y)*(A.center.y-B.center.y));

	if(dist > A.r+B.r+EPS){ //そもそも円が交わっていない

		return 0;

	}else if(dist+A.r+EPS < B.r){ //AがBに含まれている場合

		return A.r*A.r*M_PI;

	}else if(dist+B.r+EPS < A.r){ //BがAに含まれている場合

		return B.r*B.r*M_PI;
	}

	double theta_A = acos((A.r*A.r+dist*dist-B.r*B.r)/(2*A.r*dist));
	double theta_B = acos((B.r*B.r+dist*dist-A.r*A.r)/(2*B.r*dist));

	double S_1 = A.r*A.r*theta_A;
	double S_2 = B.r*B.r*theta_B;
	double S_3 = 2*Heron(A.r,B.r,dist);

	return (S_1+S_2)-S_3;
}

void func(){

	double r_A = sqrt((double)(S_A)/M_PI);
	double r_B = sqrt((double)(S_B)/M_PI);
	double H = U_H;
	double W = U_W;

	if(2*r_A > H+EPS || 2*r_A > W+EPS || 2*r_B > H+EPS || 2*r_B > W+EPS){ //どちらかの円が長方形に収まらないなら不可
		printf("impossible\n");
		return;
	}

	bool FLG = false;
	Circle A,B;

	if(r_A < r_B){
		FLG = true;
		swap(r_A,r_B);
	}

	A.set(r_A,r_A,r_A);
	B.set(W-r_B,H-r_B,r_B);

	if(calc_S(A,B) > S_AB+EPS){
		printf("impossible\n");
		return;
	}

	double L = 0,R = 1,mid,t;

	for(int loop = 0; loop < 100; loop++){

		mid = (L+R)/2;
		t = mid;

		Circle TMP;
		TMP.set((1-t)*A.center.x+t*B.center.x,(1-t)*A.center.y+t*B.center.y,B.r);

		if(calc_S(A,TMP) < S_AB){

			R = mid;
		}else{
			L = mid;
		}
	}
	B.set((1-L)*A.center.x+L*B.center.x,(1-L)*A.center.y+L*B.center.y,B.r);

	if(FLG){

		swap(A,B);
	}
	printf("%.10lf %.10lf %.10lf %.10lf %.10lf %.10lf\n",A.center.x,A.center.y,A.r,B.center.x,B.center.y,B.r);
}


int main(){

	while(true){

		scanf("%d %d %d %d %d",&U_W,&U_H,&S_A,&S_B,&S_AB);
		if(U_W == 0 && U_H == 0 && S_A == 0 && S_B == 0 && S_AB == 0)break;

		func();
	}

	return 0;
}

