#include <bits/stdc++.h>
int a[1000][2];
int b[1000][2];
int dp[300][300] = {0x10};
struct status {
  int h, t, i;
};
class P {
  status a[1000000];
  int start;
  int end;

 public:
  P() {
    start = 0;
    end = 0;
  }
  void add(int h, int t, int i) {
    a[end].h = h;
    a[end].t = t;
    a[end].i = i;
    end++;
    if (end == 1000000) end = 0;
  }
  status get() {
    status ans = a[start];
    start++;
    if (start == 1000000) start = 0;
    return ans;
  }
  bool empty() { return start == end; }
  void clear() {
    start = 0;
    end = 0;
  }
};
int h, t, R, n, m;
int loop;
int min(int a, int b) {
  if (a < b) return a;
  return b;
}
int max(int a, int b) {
  if (a > b) return a;
  return b;
}
int go(int x, int y) {
  if (x + y > R) return 0;
  int& res = dp[x][y];
  if (res == -2) {
    loop = 1;
  } else if (res == -1) {
    res = -2;
    int val = -1000000;
    for (int z = 1; z <= min(x, n); z++) {
      int nx = x - z + a[z - 1][0];
      int ny = y + a[z - 1][1];
      val = max(val, 1 + go(nx, ny));
    }
    for (int z = 1; z <= min(y, m); z++) {
      int nx = x + b[z - 1][0];
      int ny = y - z + b[z - 1][1];
      val = max(val, 1 + go(nx, ny));
    }
    res = val;
  }
  return res;
}
P c;
int main() {
  memset(dp, 0x10, sizeof(dp));
  scanf("%d%d%d", &h, &t, &R);
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d%d", &a[i][0], &a[i][1]);
  scanf("%d", &m);
  for (int i = 0; i < m; i++) scanf("%d%d", &b[i][0], &b[i][1]);
  c.add(h, t, 0);
  dp[h][t] = 0;
  while (!c.empty()) {
    status T = c.get();
    for (int i = 0; i < n; i++) {
      if (T.h > i) {
        status TT = T;
        TT.h -= i + 1;
        TT.h += a[i][0];
        TT.t += a[i][1];
        if (TT.h > 0 || TT.t > 0) {
          if (TT.h + TT.t > R) continue;
          if (dp[TT.h][TT.t] > TT.i + 1) {
            c.add(TT.h, TT.t, TT.i + 1);
            dp[TT.h][TT.t] = TT.i + 1;
          };
        } else {
          dp[0][0] = min(dp[0][0], TT.i + 1);
          break;
        }
      }
    }
    for (int i = 0; i < m; i++) {
      if (T.t > i) {
        status TT = T;
        TT.t -= i + 1;
        TT.h += b[i][0];
        TT.t += b[i][1];
        if (TT.h > 0 || TT.t > 0) {
          if (TT.h + TT.t > R) continue;
          if (dp[TT.h][TT.t] > TT.i + 1) {
            c.add(TT.h, TT.t, TT.i + 1);
            dp[TT.h][TT.t] = TT.i + 1;
          };
        } else {
          dp[0][0] = min(dp[0][0], TT.i + 1);
          break;
        }
      }
    }
  }
  if (dp[0][0] != 0x10101010) {
    printf("Ivan\n%d", dp[0][0]);
    return 0;
  }
  c.clear();
  loop = 0;
  memset(dp, 0xFF, sizeof(dp));
  int rez;
  rez = go(h, t);
  if (loop)
    printf("Draw");
  else
    printf("Zmey\n%d", rez);
  return 0;
}
