// implment 24min #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned int uint; typedef unsigned long long ull; static const double EPS = 1e-9; static const double PI = acos(-1.0); #define REP(i, n) for (int i = 0; i < (int)(n); i++) #define FOR(i, s, n) for (int i = (s); i < (int)(n); i++) #define FOREQ(i, s, n) for (int i = (s); i <= (int)(n); i++) #define FORIT(it, c) for (__typeof((c).begin())it = (c).begin(); it != (c).end(); it++) #define MEMSET(v, h) memset((v), h, sizeof(v)) ll n, a, b; ll seq[100010]; ll nim(ll m) { ll sum = 0; REP(i, n) { sum ^= seq[i] % (m + 1); } return sum; } int main() { while (scanf("%lld %lld %lld", &n, &a, &b) > 0) { REP(i, n) { int v = scanf("%lld", &seq[i]); assert(v == 1); } bool win = false; if (a == b) { win = nim(b) != 0; } else if (a > b) { win |= nim(b) != 0; REP(i, n) { if (seq[i] > b) { win = true; } } } else { win = true; ll sum = nim(a); if (sum == 0) { win = false; } vector over_a; REP(i, n) { if (seq[i] > a) { over_a.push_back(i); } } if (win && over_a.size() > 1) { win = false; } if (win && over_a.size() == 1) { ll target = (seq[over_a[0]] % (a + 1)) ^ sum; ll diff = seq[over_a[0]] - target; assert(target >= 0); if (diff <= 0 || a < diff || a < target) { win = false; } } } puts(win ? "Hanako" : "Jiro"); } }