#include <bits/stdc++.h>
using namespace std;
int a, b, l;
double EPS = 1e-10;
const double INF = 1e+10;
const double PI = acos(-1.0);
int sig(double r) { return (r < -EPS) ? -1 : (r > +EPS) ? +1 : 0; }
struct Pt {
  double x, y;
  Pt() {}
  Pt(double x, double y) : x(x), y(y) {}
  Pt operator+(const Pt &a) const { return Pt(x + a.x, y + a.y); }
  Pt operator-(const Pt &a) const { return Pt(x - a.x, y - a.y); }
  Pt operator*(const Pt &a) const {
    return Pt(x * a.x - y * a.y, x * a.y + y * a.x);
  }
  Pt operator-() const { return Pt(-x, -y); }
  Pt operator*(const double &k) const { return Pt(x * k, y * k); }
  Pt operator/(const double &k) const { return Pt(x / k, y / k); }
  double abs() const { return sqrt(x * x + y * y); }
  double abs2() const { return x * x + y * y; }
  double arg() const { return atan2(y, x); }
  double dot(const Pt &a) const { return x * a.x + y * a.y; }
  double det(const Pt &a) const { return x * a.y - y * a.x; }
  bool operator<(const Pt &a) const {
    return (x != a.x) ? (x < a.x) : (y < a.y);
  }
  bool operator==(const Pt &a) const {
    return (sig(x - a.x) == 0 && sig(y - a.y) == 0);
  }
};
ostream &operator<<(ostream &os, const Pt &a) {
  os << "(" << a.x << ", " << a.y << ")";
  return os;
}
double tri(Pt a, Pt b, Pt c) { return (b - a).det(c - a); }
Pt proj(Pt a, Pt b) { return a * a.dot(b) / a.abs2(); }
Pt perp(Pt a, Pt b, Pt c) { return a + proj(b - a, c - a); }
Pt refl(Pt a, Pt b, Pt c) { return perp(a, b, c) * 2 - c; }
bool canZero() {
  double f = 0;
  double t = PI / 2;
  for (int i = 0; i < 300; i++) {
    double alpha1 = f + 1 * (t - f) / 3;
    double alpha2 = f + 2 * (t - f) / 3;
    double len1 = a / sin(alpha1) + b / cos(alpha1);
    double len2 = a / sin(alpha2) + b / cos(alpha2);
    if (len1 > len2) {
      f = alpha1;
    } else {
      t = alpha2;
    }
  }
  double maxLen = a / sin(f) + b / cos(f);
  return maxLen >= l;
}
double getLen(double alpha) {
  Pt pt1(0, l * sin(alpha));
  Pt pt2(l * cos(alpha), 0);
  Pt p = perp(pt1, pt2, Pt(a, b));
  Pt x = Pt(a, b) - p;
  double len1 = x.abs();
  return len1;
}
double canMake() {
  double f = 0;
  double t = PI / 2;
  for (int i = 0; i < 300; i++) {
    double alpha1 = f + 1 * (t - f) / 3;
    double alpha2 = f + 2 * (t - f) / 3;
    double len1 = getLen(alpha1);
    double len2 = getLen(alpha2);
    if (len1 > len2) {
      f = alpha1;
    } else {
      t = alpha2;
    }
  }
  double len1 = getLen(f);
  return len1;
}
int main(int argc, char *argv[]) {
  cin >> a >> b >> l;
  if (l <= min(a, b)) {
    printf("%d", l);
    return 0;
  }
  if (l <= max(a, b)) {
    printf("%d", min(a, b));
    return 0;
  }
  if (!canZero()) {
    printf("My poor head =(");
    return 0;
  }
  double w = canMake();
  printf("%.7lf", w);
  return 0;
}
