#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:64000000")
const unsigned long long MAXN = 1001;
const double PI = 3.1415926535897932384626433832795;
const long long ONE = 1LL;
const double EPS = 1e-8;
long long gcd(long long a, long long b) { return (b) ? gcd(b, a % b) : a; }
long long max(long long a, long long b) { return (a > b) ? a : b; }
struct Point {
  unsigned long long x, y;
  Point(unsigned long long _x = 0, unsigned long long _y = 0) : x(_x), y(_y) {}
  void Read() { cin >> x >> y; }
  double Dist(Point a) {
    return sqrt((double)((a.x - x) * (a.x - x) + (a.y - y) * (a.y - y)));
  }
};
double dp[1001];
int x, y;
bool chk() { return x * 100 + y * 10 >= 220 && (y >= 2); }
int main() {
  cin >> x >> y;
  vector<pair<int, int> > ways;
  ways.push_back(make_pair(2, 2));
  ways.push_back(make_pair(1, 12));
  ways.push_back(make_pair(0, 22));
  bool turn = false;
  bool fl = true;
  if (!chk()) {
    cout << "Hanako" << endl;
    return 0;
  }
  while (true) {
    turn = !turn;
    fl = false;
    if (turn) {
      for (int i = 0; i < 3; ++i) {
        if (ways[i].first <= x && ways[i].second <= y) {
          x -= ways[i].first;
          y -= ways[i].second;
          fl = true;
          break;
        }
      }
      if (!chk()) {
        break;
      }
      continue;
    } else {
      for (int i = 2; i >= 0; --i) {
        if (ways[i].first <= x && ways[i].second <= y) {
          x -= ways[i].first;
          y -= ways[i].second;
          fl = true;
          break;
        }
      }
      if (!chk()) {
        break;
      }
      continue;
    }
    if (!fl) break;
  }
  if (turn) {
    cout << "Ciel" << endl;
  } else {
    cout << "Hanako" << endl;
  }
  return 0;
}
