#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
struct data {
  int h, t, a;
  data(int h_, int t_, int a_) {
    h = h_;
    t = t_;
    a = a_;
  }
};
vector<data> vch[N + 10], vct[N + 10];
queue<pair<int, int> > qu;
int x[N + 10], y[N + 10];
int x_[N + 10], y_[N + 10];
int mrk[N + 10][N + 10], h[N + 10][N + 10];
int R, lose;
void bfs(int H, int T) {
  qu.push(pair<int, int>(H, T));
  while (qu.size()) {
    H = qu.front().first, T = qu.front().second;
    mrk[H][T] = true;
    if (!H && !T) {
      cout << "Ivan" << endl << h[H][T];
      exit(0);
    }
    if (H + T > R) {
      qu.pop();
      continue;
    }
    for (int i = 0; i < vch[H].size(); i++) {
      int head = H - vch[H][i].a + vch[H][i].h, tail = T + vch[H][i].t;
      if (mrk[head][tail]) continue;
      qu.push(pair<int, int>(head, tail));
      h[head][tail] = h[H][T] + 1;
      mrk[head][tail] = 1;
    }
    for (int i = 0; i < vct[T].size(); i++) {
      int head = H + vct[T][i].h, tail = T - vct[T][i].a + vct[T][i].t;
      if (mrk[head][tail]) continue;
      qu.push(pair<int, int>(head, tail));
      h[head][tail] = h[H][T] + 1;
      mrk[head][tail] = 1;
    }
    qu.pop();
  }
  return;
}
void dfs(int H, int T) {
  mrk[H][T] = 1;
  if (H + T > R) {
    lose = max(lose, h[H][T]), mrk[H][T] = 2;
    return;
  }
  for (int i = 0; i < vch[H].size(); i++) {
    int head = H - vch[H][i].a + vch[H][i].h, tail = T + vch[H][i].t;
    if (!mrk[head][tail])
      h[head][tail] = h[H][T] + 1, dfs(head, tail);
    else if (mrk[head][tail] == 1) {
      cout << "Draw";
      exit(0);
    } else if (h[H][T] + 1 > h[head][tail])
      h[head][tail] = h[H][T] + 1, dfs(head, tail);
  }
  for (int i = 0; i < vct[T].size(); i++) {
    int head = H + vct[T][i].h, tail = T - vct[T][i].a + vct[T][i].t;
    if (head + tail > R) lose = max(lose, h[H][T] + 1);
    if (!mrk[head][tail])
      h[head][tail] = h[H][T] + 1, dfs(head, tail);
    else if (mrk[head][tail] == 1) {
      cout << "Draw";
      exit(0);
    } else if (h[H][T] + 1 > h[head][tail])
      h[head][tail] = h[H][T] + 1, dfs(head, tail);
  }
  mrk[H][T] = 2;
  return;
}
int main() {
  int H, T;
  cin >> H >> T >> R;
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> x[i] >> y[i];
  int m;
  cin >> m;
  for (int i = 1; i <= m; i++) cin >> x_[i] >> y_[i];
  for (int i = 1; i < N; i++) {
    for (int j = 1; j <= min(i, n); j++) vch[i].push_back(data(x[j], y[j], j));
    for (int j = 1; j <= min(i, m); j++)
      vct[i].push_back(data(x_[j], y_[j], j));
  }
  bfs(H, T);
  memset(mrk, 0, sizeof mrk);
  memset(h, 0, sizeof h);
  dfs(H, T);
  return cout << "Zmey" << endl << lose, 0;
}
