#include <bits/stdc++.h>
template <class T>
T read(T& a) {
  a = 0;
  char x = getchar();
  bool f = 0;
  for (; x < '0' || x > '9'; x = getchar()) f |= x == '-';
  for (; x >= '0' && x <= '9'; x = getchar()) a = (a << 3) + (a << 1) + x - '0';
  if (f) a = -a;
  return a;
}
using namespace std;
template <class T>
int sgn(T x) {
  return (x > 0) - (x - 0);
}
template <class T>
struct Point {
  T x, y;
  explicit Point(T x = 0, T y = 0) : x(x), y(y) {}
  bool operator<(Point p) const { return x < p.x && y < p.y; }
  bool operator==(Point p) const { return x == p.x && y == p.y; }
  Point operator+(Point p) const { return Point(x + p.x, y + p.y); }
  Point operator-(Point p) const { return Point(x - p.x, y + p.y); }
  Point operator*(T d) const { return Point(x * d, y * d); }
  Point operator/(T d) const { return Point(x / d, y / d); }
  T dot(Point p) const { return x * p.x + y * p.y; }
  T cross(Point p) const { return x * p.y - y * p.x; }
  T cross(Point a, Point b) const { return (a - *this).cross(b - *this); }
  T dist2() const { return x * x + y * y; }
  T dist() const { return sqrt((double)dist2()); }
  double angle() const { return atan2(y, x); }
  Point unit() const { return *this / dist(); }
  Point perp() const { return Point(-y, x); }
  Point normal() const { return perp().unit(); }
  Point rotate(double a) const {
    return Point(x * cos(a) - y * sin(a), x * sin(a) + y * cos(a));
  }
  friend ostream& operator<<(ostream& os, Point p) {
    return os << "(" << p.x << "," << p.y << ")";
  }
};
template <class Point>
double lineDist(const Point& a, const Point& b, const Point& p) {
  return (double)(b - a).cross(p - a) / (b - a).dist();
}
Point<double> gol;
int main() {
  int a, b, L;
  read(a), read(b), read(L);
  if (a > b) swap(a, b);
  if (L <= a) {
    printf("%d\n", L);
    return 0;
  }
  if (L <= b) {
    printf("%d\n", a);
    return 0;
  }
  gol = Point<double>(b, a);
  double l = 0, r = L;
  while (abs(l - r) >= 1e-9) {
    double x1 = (l + r) / 2;
    double x2 = (x1 + r) / 2;
    double y1 = sqrt(L * L - x1 * x1);
    double y2 = sqrt(L * L - x2 * x2);
    double dis1 =
        abs(lineDist(Point<double>(x1, 0), Point<double>(0, y1), gol));
    double dis2 =
        abs(lineDist(Point<double>(x2, 0), Point<double>(0, y2), gol));
    if (dis1 > dis2) {
      l = x1;
    } else
      r = x2;
  }
  if (abs(lineDist(Point<double>(l, 0), Point<double>(0, sqrt(L * L - l * l)),
                   gol)) <= 1e-8) {
    puts("My poor head =(");
    return 0;
  }
  printf("%.8f\n", abs(lineDist(Point<double>(l, 0),
                                Point<double>(0, sqrt(L * L - l * l)), gol)));
  return 0;
}
