#include <bits/stdc++.h>
using namespace std;
inline double vm(double x1, double y1, double x2, double y2) {
  return x1 * y2 - x2 * y1;
}
inline double sm(double x1, double y1, double x2, double y2) {
  return x1 * x2 + y2 * y1;
}
inline double dist(double x1, double y1, double x2, double y2) {
  return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
const double eps = 1e-12;
const int inf = 1000000002;
inline int Str2Int(string s) { return atoi(s.c_str()); }
inline string Int2Str(int i) {
  ostringstream ous;
  ous << i;
  return ous.str();
}
double getdist(double x, double y, double x1, double y1, double x2, double y2) {
  if (sm(x - x1, y - y1, x2 - x1, y2 - y1) >= 0 &&
      sm(x - x2, y - y2, x1 - x2, y1 - y2) >= 0) {
    return abs(vm(x - x1, y - y1, x2 - x1, y2 - y1) / dist(x1, y1, x2, y2));
  } else {
    return min(dist(x, y, x1, y1), dist(x, y, x2, y2));
  }
}
double a, b, l;
const int maxn = 3000;
double mas[maxn + 1], ans[maxn + 1];
void can(double& w) {
  w = 1e100;
  double L = 0, R = l;
  for (int q = 0; q < 10; ++q) {
    int best = 0;
    for (int i = 0; i <= maxn; ++i) {
      mas[i] = L + (R - L) * i / maxn;
      ans[i] = getdist(a, b, 0, mas[i], sqrt(l * l - mas[i] * mas[i]), 0);
      if (ans[i] < ans[best]) {
        best = i;
      }
      if (w > ans[i]) w = ans[i];
    }
    L = mas[max(best - 1, 0)];
    R = mas[min(best + 1, maxn)];
  }
}
int main() {
  cin >> a >> b >> l;
  double X;
  can(X);
  if (l <= b) X = l;
  if (l <= a) X = max(X, b);
  if (X >= 1e-8) {
    printf("%.10lf\n", min(a, min(b, min(X, l))));
  } else
    cout << "My poor head =(" << endl;
  return 0;
}
