#include <bits/stdc++.h>
using namespace std;
const double EPS = 10e-9;
inline double d(double x, double a, double b, double l, double w) {
  double y = sqrt(l * l - x * x);
  return ((x * y + (-y * b - x * a)) / (-l)) - w;
}
bool correct(double a, double b, double l, double w) {
  if (w > a || w > b) return false;
  double low = EPS, high = l - EPS;
  while (low + EPS < high) {
    double p1 = (2.0 * low + high) / 3.0;
    double p2 = (2.0 * high + low) / 3.0;
    double dp1 = d(p1, a, b, l, w);
    double dp2 = d(p2, a, b, l, w);
    if (dp1 < 0 || dp2 < 0) return false;
    if (dp1 < dp2)
      high = p2;
    else
      low = p1;
  }
  return d(low, a, b, l, w) > 0;
}
double binw(int a, int b, int l) {
  double low = 0, high = min(a, b);
  while (low + EPS < high) {
    double m = (low + high) / 2.0;
    if (correct(a, b, l, m)) {
      low = m;
    } else {
      high = m;
    }
  }
  return low;
}
int main() {
  int a, b, l;
  scanf("%d%d%d", &a, &b, &l);
  double result = -1;
  double v = binw(a, b, l);
  if (v > EPS) result = max(result, v);
  v = binw(b, a, l);
  if (v > EPS) result = max(result, v);
  if (a >= l) result = max(result, (double)b);
  if (b >= l) result = max(result, (double)a);
  result = min(result, (double)l);
  if (result < 0) {
    printf("My poor head =(\n");
  } else {
    printf("%.7lf\n", min(result, (double)l));
  }
  return 0;
}
