#include <bits/stdc++.h>
using namespace std;
enum { HEAD, TAIL, TOTAL };
const int N = 402;
const int INF = N * N * N;
bool draw[N][N];
short visited[N][N];
int win[N][N], loose[N][N];
int regHead[N][TOTAL];
int regTail[N][TOTAL];
int h, t, R, n, m;
int dist[N][N];
void dfs(int heads, int tails) {
  visited[heads][tails] = 1;
  if (heads + tails > R) {
    loose[heads][tails] = 0;
  } else if (heads + tails == 0) {
    win[heads][tails] = 0;
  } else {
    for (int i = 1; i <= min(heads, n); i++) {
      int nh = heads - i + regHead[i][HEAD];
      int nt = tails + regHead[i][TAIL];
      if (visited[nh][nt] == 0)
        dfs(nh, nt);
      else if (visited[nh][nt] == 1)
        draw[heads][tails] = true;
      loose[heads][tails] = max(loose[heads][tails], loose[nh][nt]);
      draw[heads][tails] |= draw[nh][nt];
    }
    for (int i = 1; i <= min(tails, m); i++) {
      int nh = heads + regTail[i][HEAD];
      int nt = tails - i + regTail[i][TAIL];
      if (visited[nh][nt] == 0)
        dfs(nh, nt);
      else if (visited[nh][nt] == 1)
        draw[heads][tails] = true;
      draw[heads][tails] |= draw[nh][nt];
      loose[heads][tails] = max(loose[heads][tails], loose[nh][nt]);
    }
    if (loose[heads][tails] != -1) loose[heads][tails]++;
  }
  visited[heads][tails] = 2;
}
int main() {
  cin.sync_with_stdio(false);
  for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++) {
      dist[i][j] = INF;
      loose[i][j] = -1;
    }
  cin >> h >> t >> R;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> regHead[i][HEAD] >> regHead[i][TAIL];
  cin >> m;
  for (int i = 1; i <= m; i++) cin >> regTail[i][HEAD] >> regTail[i][TAIL];
  dfs(h, t);
  dist[h][t] = 0;
  queue<pair<int, int> > q;
  q.push(make_pair(h, t));
  while (not q.empty()) {
    pair<int, int> cur = q.front();
    q.pop();
    int heads = cur.first, tails = cur.second;
    if (heads + tails > R) {
      continue;
    }
    for (int i = 1; i <= min(heads, n); i++) {
      int nh = heads - i + regHead[i][HEAD];
      int nt = tails + regHead[i][TAIL];
      if (dist[nh][nt] == INF) {
        dist[nh][nt] = dist[cur.first][cur.second] + 1;
        q.push(make_pair(nh, nt));
      }
    }
    for (int i = 1; i <= min(tails, m); i++) {
      int nh = heads + regTail[i][HEAD];
      int nt = tails - i + regTail[i][TAIL];
      if (dist[nh][nt] == INF) {
        dist[nh][nt] = dist[cur.first][cur.second] + 1;
        q.push(make_pair(nh, nt));
      }
    }
  }
  if (dist[0][0] != INF)
    cout << "Ivan\n" << dist[0][0];
  else if (draw[h][t])
    cout << "Draw";
  else {
    cout << "Zmey\n" << loose[h][t];
  }
  cout << endl;
  return 0;
}
