#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-8;
const double PI = acos(-1.0);
int Uw, Uh, A, B, AB;
struct Point {
	double x, y;
	Point() {}
	Point(double _x, double _y) : x(_x), y(_y) {}
	double Dis() {
		return sqrt(x * x + y * y);
	}
	friend Point operator + (const Point &a, const Point &b) {
		return Point(a.x + b.x, a.y + b.y);
	}
	friend Point operator - (const Point &a, const Point &b) {
		return Point(a.x - b.x, a.y - b.y);
	}
	friend Point operator * (const Point &a, const double &b) {
		return Point(a.x * b, a.y * b);
	}
	friend Point operator / (const Point &a, const double &b) {
		return Point(a.x / b, a.y / b);
	}
}l, r, mid;
double RA, RB;
struct Circle {
	Point O;
	double R;
	Circle() {}
	Circle(Point _O, double _R) : O(_O), R(_R) {}
}CA;
double S(Circle X, Circle Y) {
	if (X.R < Y.R) {
		swap(X, Y);
	}
	double d = (X.O - Y.O).Dis();
	if (d + EPS > X.R + Y.R) {
		return 0;
	}
	if (d < X.R - Y.R + EPS) {
		return PI * Y.R * Y.R;
	}
	double alpha = acos((X.R * X.R + d * d - Y.R * Y.R) / (2 * X.R * d));
	double beta = acos((Y.R * Y.R + d * d - X.R * X.R) / (2 * Y.R * d));
	return alpha * X.R * X.R + beta * Y.R * Y.R - X.R * d * sin(alpha);
}
int main() {
	while (scanf("%d%d%d%d%d", &Uw, &Uh, &A, &B, &AB) && (Uw || Uh || A || B || AB)) {
		RA = sqrt(A / PI);
		RB = sqrt(B / PI);
		bool flag = 0;
		if (RA < RB) {
			swap(RA, RB);
			flag = 1;
		}
		if (RA * 2 > min(Uw, Uh) || RB * 2 > min(Uw, Uh)) {
			printf("impossible\n");
			continue;
		}
		CA = Circle(Point(RA, RA), RA);
		l = Point(RA, RA);
		r = Point(Uw - RB, Uh - RB);
		if (S(CA, Circle(r, RB)) > AB) {
			printf("impossible\n");
			continue;
		}
		int cnt = 0;
		while (cnt <= 100) {
			cnt++;
			mid = (l + r) / 2;
			if (S(CA, Circle(mid, RB)) < AB) {
				r = mid;
			} else {
				l = mid;
			}
		}
		if (flag) {
			printf("%.10f %.10f %.10f %.10f %.10f %.10f\n", l.x, l.y, RB, CA.O.x, CA.O.y, CA.R);
		} else {
			printf("%.10f %.10f %.10f %.10f %.10f %.10f\n", CA.O.x, CA.O.y, CA.R, l.x, l.y, RB);
		}
	}
	return 0;
}