#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
template <typename T>
inline T sqr(T a) {
  return a * a;
}
template <typename T>
inline void relaxMin(T &a, T b) {
  if (b < a) a = b;
}
template <typename T>
inline void relaxMax(T &a, T b) {
  if (b > a) a = b;
}
const int INF = (int)1E9;
const long double EPS = 1E-12;
const long double PI = 3.1415926535897932384626433832795;
int a, b;
long double dist(long double len, long double w, long double start) {
  long double dx = sqrt(sqr(len) - sqr(start));
  long double A = start;
  long double B = dx;
  long double C = -start * dx;
  return (A * a + B * b + C) / sqrt(A * A + B * B);
}
bool check(long double len, long double w) {
  if (w > a) return false;
  if (len - EPS < b && w - EPS < a) return true;
  long double l = 0, r = len;
  for (int i = 0, _n(250); i < _n; i++) {
    long double m1 = l + (r - l) / 3, m2 = r - (r - l) / 3;
    long double d1, d2;
    d1 = dist(len, w, m1);
    d2 = dist(len, w, m2);
    if (dist(len, w, m1) > dist(len, w, m2))
      l = m1;
    else
      r = m2;
  }
  long double d0 = dist(len, w, l) - w;
  return d0 > 0;
  l = 0;
  for (int i = 0, _n(250); i < _n; i++) {
    long double m1 = l + (r - l) / 3, m2 = r - (r - l) / 3;
    long double d1, d2;
    d1 = dist(len, w, m1) - w;
    d2 = dist(len, w, m2) - w;
    if (fabs(dist(len, w, m1) - w) > fabs(dist(len, w, m2) - w))
      l = m1;
    else
      r = m2;
  }
  return l < r;
}
void solve() {
  int len;
  cin >> a >> b >> len;
  long double l = 0.0, r = min(len + 0.0, sqrt(a * a + b * b + 0.0));
  for (int i = 0, _n(300); i < _n; i++) {
    long double mid = (l + r) / 2.0;
    if (check(len, mid) || check(mid, len))
      l = mid;
    else
      r = mid;
  }
  if (l < 1e-10)
    puts("My poor head =(");
  else
    printf("%.10lf", l);
}
int main() {
  solve();
  return 0;
}
