#include <bits/stdc++.h>
using namespace std;
int h, t, r, n, m;
int t1[201], t2[201], t3[201], t4[201], t9[201], t10[201];
int flag;
int dis[501][501];
int x[100000], y[100000];
int vis[501][501];
int ans1, ans2;
void bfs() {
  int left = 1, right = 1;
  x[1] = h;
  y[1] = t;
  dis[h][t] = 0;
  vis[h][t] = 1;
  while (left <= right) {
    int dx, dy;
    for (int i = 1; i <= n; i++) {
      dx = x[left] + t1[i];
      dy = y[left] + t2[i];
      if (x[left] < i) continue;
      if (dx < 0 || dy < 0 || dx + dy > r) continue;
      if (!vis[dx][dy]) {
        x[++right] = dx;
        y[right] = dy;
        dis[dx][dy] = dis[x[left]][y[left]] + 1;
        vis[dx][dy] = 1;
      }
    }
    for (int i = 1; i <= m; i++) {
      dx = x[left] + t3[i];
      dy = y[left] + t4[i];
      if (y[left] < i) continue;
      if (dx < 0 || dy < 0 || dx + dy > r) continue;
      if (!vis[dx][dy]) {
        x[++right] = dx;
        y[right] = dy;
        dis[dx][dy] = dis[x[left]][y[left]] + 1;
        vis[dx][dy] = 1;
      }
    }
    left++;
  }
}
bool dfs(int q, int w) {
  vis[q][w] = 2;
  int dx, dy;
  for (int i = 1; i <= n; i++) {
    dx = q + t1[i];
    dy = w + t2[i];
    if (q < i) break;
    if (dx < 0 || dy < 0 || dx + dy > r) continue;
    if (!vis[dx][dy]) {
      if (dfs(dx, dy)) return 1;
    } else if (vis[dx][dy] == 2)
      return 1;
  }
  for (int i = 1; i <= m; i++) {
    dx = q + t3[i];
    dy = w + t4[i];
    if (w < i) break;
    if (dx < 0 || dy < 0 || dx + dy > r) continue;
    if (!vis[dx][dy]) {
      if (dfs(dx, dy)) return 1;
    } else if (vis[dx][dy] == 2)
      return 1;
  }
  vis[q][w] = 1;
  return 0;
}
void dfs2(int q, int w, int dist) {
  if (q + w > r) {
    ans1 = max(ans1, dist);
    return;
  }
  dis[q][w] = dist;
  int dx, dy;
  for (int i = 1; i <= n; i++) {
    dx = q + t1[i];
    dy = w + t2[i];
    if (q < i) break;
    if (dx < 0 || dy < 0) continue;
    if (dis[dx][dy] < dist + 1) dfs2(dx, dy, dist + 1);
  }
  for (int i = 1; i <= m; i++) {
    dx = q + t3[i];
    dy = w + t4[i];
    if (w < i) break;
    if (dx < 0 || dy < 0) continue;
    if (dis[dx][dy] < dist + 1) dfs2(dx, dy, dist + 1);
  }
}
int main() {
  memset(dis, 0x3f, sizeof(dis));
  cin >> h >> t >> r;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    scanf("%d %d", &t1[i], &t2[i]);
    t9[i] = t1[i];
    t1[i] = t1[i] - i;
    ans2 = min(t1[i] + t2[i], ans2);
  }
  cin >> m;
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &t3[i], &t4[i]);
    t10[i] = t3[i];
    t4[i] = t4[i] - i;
    ans2 = min(t3[i] + t4[i], ans2);
  }
  bfs();
  if (vis[0][0]) {
    printf("Ivan\n%d", dis[0][0]);
  } else {
    memset(vis, 0, sizeof(vis));
    if (dfs(h, t))
      printf("Draw");
    else {
      printf("Zmey\n");
      memset(dis, 0, sizeof(dis));
      dfs2(h, t, 0);
      cout << ans1;
    }
  }
  return 0;
}
