#include <bits/stdc++.h>
using namespace std;
struct Tree {
  int s, low[30];
} tree[410000];
int pre[110000][30];
int n, m, K;
int g[30];
void update(int now, int L, int R) {
  if (tree[now].s)
    for (int k = 0; k < 30; k++) tree[now].low[k] = pre[R][k] - pre[L - 1][k];
  else if (L == R)
    for (int k = 0; k < 30; k++) tree[now].low[k] = 0;
  else
    for (int k = 0; k < 30; k++)
      tree[now].low[k] = tree[now << 1].low[k] + tree[now << 1 | 1].low[k];
}
void change(int now, int l, int r, int x, int y, int k) {
  if (y < l || x > r) return;
  if (x <= l && r <= y) {
    tree[now].s += k;
    update(now, l, r);
    return;
  }
  int mid = (l + r) >> 1;
  change(now << 1, l, mid, x, y, k);
  change(now << 1 | 1, mid + 1, r, x, y, k);
  update(now, l, r);
}
void getlow(int n) {
  for (int i = 0; i < 30; i++) g[i] = 0;
  for (int k = 29; k; k--) {
    g[k - 1] += g[k] << 1;
    if (n >> k & 1) g[k - 1]++;
  }
  for (int k = 0; k < 30; k++)
    if (n >> k & 1) g[k]++;
}
struct node {
  int l, r, t, op;
} op[110000];
int tmp[110000], tp;
bool cmp(node a, node b) { return a.t < b.t; }
int main() {
  scanf("%*d%d%d", &m, &K);
  for (int k = 0; k <= 30; k++)
    if ((1 << k) > K) {
      K = 1 << (k - 1);
      break;
    }
  int lx, ly, rx, ry;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d%d", &lx, &ly, &rx, &ry);
    op[++n] = (node){ly, ry, lx, 1};
    tmp[n] = ly - 1;
    op[++n] = (node){ly, ry, rx + 1, -1};
    tmp[n] = ry;
  }
  sort(tmp + 1, tmp + n + 1);
  n = unique(tmp + 1, tmp + n + 1) - tmp - 1;
  for (int i = 1; i <= n; i++) {
    getlow(tmp[i]);
    for (int k = 0; k < 30; k++) pre[i][k] = g[k];
  }
  sort(op + 1, op + m * 2 + 1, cmp);
  int sg = 0;
  for (int i = 1; i <= m * 2; i++) {
    int s[30];
    getlow(op[i].t - 1);
    for (int k = 0; k < 30; k++) s[k] = g[k];
    getlow(op[i - 1].t - 1);
    for (int k = 0; k < 30; k++) s[k] -= g[k];
    for (int k1 = 0; k1 < 30; k1++)
      if (s[k1] & 1)
        for (int k2 = 0; k2 < 30; k2++)
          if (tree[1].low[k2] & 1) sg ^= min(min(1 << k1, 1 << k2), K);
    int l = lower_bound(tmp + 1, tmp + n + 1, op[i].l - 1) - tmp + 1;
    int r = lower_bound(tmp + 1, tmp + n + 1, op[i].r) - tmp;
    change(1, 1, n, l, r, op[i].op);
  }
  if (sg)
    puts("Hamed");
  else
    puts("Malek");
  return 0;
}
