#include <bits/stdc++.h>
using namespace std;
const int MAXN = 210;
int n, m, h, t, r, a[MAXN], b[MAXN], f[MAXN], g[MAXN], dis[MAXN][MAXN];
int mark[MAXN][MAXN];
void bfs() {
  queue<pair<int, int> > q;
  if (h + t > r) return;
  mark[h][t] = 1;
  dis[h][t] = 0;
  q.push(make_pair(h, t));
  while (!q.empty()) {
    int x = q.front().first, y = q.front().second;
    q.pop();
    if (x == 0 && y == 0) return;
    int ppp;
    for (int i = 1; i <= min(x, n); i++) {
      int v = x - i + f[i], u = y + g[i];
      if (mark[v][u] == 0 && v + u <= r) {
        dis[v][u] = dis[x][y] + 1;
        mark[v][u] = 1;
        q.push(make_pair(v, u));
      }
    }
    for (int i = 1; i <= min(y, m); i++) {
      int v = x + a[i], u = y + b[i] - i;
      if (mark[v][u] == 0 && v + u <= r) {
        dis[v][u] = dis[x][y] + 1;
        mark[v][u] = 1;
        q.push(make_pair(v, u));
      }
    }
  }
}
bool cycle(int x, int y) {
  mark[x][y] = 1;
  for (int i = 1; i <= min(x, n); i++) {
    int v = x - i + f[i], u = y + g[i];
    if (mark[v][u] == 0 && v + u <= r && cycle(v, u))
      return true;
    else if (mark[v][u] == 1 && v + u <= r)
      return true;
  }
  for (int i = 1; i <= min(y, m); i++) {
    int v = x + a[i], u = y + b[i] - i;
    if (mark[v][u] == 0 && v + u <= r && cycle(v, u))
      return true;
    else if (mark[v][u] == 1 && v + u <= r)
      return true;
  }
  mark[x][y] = 2;
  return false;
}
vector<pair<int, int> > topol;
int dp[MAXN][MAXN];
void dfs(int x, int y) {
  mark[x][y] = 1;
  for (int i = 1; i <= min(x, n); i++) {
    int v = x - i + f[i], u = y + g[i];
    if (v + u > r) continue;
    if (mark[v][u] == 0) dfs(v, u);
  }
  for (int i = 1; i <= min(y, m); i++) {
    int v = x + a[i], u = y + b[i] - i;
    if (v + u > r) continue;
    if (mark[v][u] == 0) dfs(v, u);
  }
  topol.push_back(make_pair(x, y));
}
int lpath(int x, int y) {
  int f1 = x, f2 = y;
  dfs(x, y);
  for (int i = 0; i < topol.size(); i++) {
    x = topol[i].first;
    y = topol[i].second;
    for (int j = 1; j <= min(x, n); j++) {
      int v = x - j + f[j], u = y + g[j];
      if (v + u > r) continue;
      dp[x][y] = max(dp[x][y], dp[v][u] + 1);
    }
    for (int j = 1; j <= min(y, m); j++) {
      int v = x + a[j], u = y + b[j] - j;
      if (v + u > r) continue;
      dp[x][y] = max(dp[x][y], dp[v][u] + 1);
    }
  }
  return dp[f1][f2] + 1;
}
int main() {
  ios_base::sync_with_stdio(false);
  memset(dis, 127, sizeof dis);
  cin >> h >> t >> r >> n;
  for (int i = 1; i <= n; i++) cin >> f[i] >> g[i];
  cin >> m;
  for (int i = 1; i <= m; i++) cin >> a[i] >> b[i];
  bfs();
  if (mark[0][0] == 1) {
    cout << "Ivan\n" << dis[0][0] << endl;
    return 0;
  } else {
    memset(mark, 0, sizeof mark);
    if (cycle(h, t))
      cout << "Draw" << endl;
    else {
      cout << "Zmey" << endl;
      memset(mark, 0, sizeof mark);
      cout << lpath(h, t) << endl;
    }
  }
  return 0;
}
