#include <bits/stdc++.h>
using namespace std;
const int maxN = 200 + 321;
const int mod = 1000 * 1000 + 3;
pair<int, int> head[maxN];
pair<int, int> tail[maxN];
int mark[maxN][maxN];
int h, t, r, n, m;
vector<pair<int, int> > topol;
int dp[1000 * 100];
void dfs(int x, int y) {
  mark[x][y] = 2;
  if (x + y > r) {
    mark[x][y] = 1;
    return;
  }
  for (int i = 1; i <= min(x, n); i++) {
    int u = x - i + head[i].first;
    int v = y + head[i].second;
    if (!mark[u][v])
      dfs(u, v);
    else if (mark[u][v] == 2) {
      cout << "Draw" << endl;
      exit(0);
    }
  }
  for (int i = 1; i <= min(y, m); i++) {
    int u = x + tail[i].first;
    int v = y - i + tail[i].second;
    if (!mark[u][v])
      dfs(u, v);
    else if (mark[u][v] == 2) {
      cout << "Draw" << endl;
      exit(0);
    }
  }
  mark[x][y] = 1;
  topol.push_back(make_pair(x, y));
}
int main() {
  cin >> h >> t >> r;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> head[i].first >> head[i].second;
  cin >> m;
  for (int i = 1; i <= m; i++) cin >> tail[i].first >> tail[i].second;
  queue<pair<int, int> > q;
  q.push(make_pair(h, t));
  mark[h][t] = 1;
  while (q.size()) {
    pair<int, int> x = q.front();
    q.pop();
    if (x.first + x.second > r) continue;
    int u = 0, v = 0;
    for (int i = 1; i <= min(x.first, n); i++) {
      u = x.first - i + head[i].first;
      v = x.second + head[i].second;
      if (!mark[u][v]) {
        mark[u][v] = mark[x.first][x.second] + 1;
        q.push(make_pair(u, v));
      }
    }
    for (int i = 1; i <= min(m, x.second); i++) {
      u = x.first + tail[i].first;
      v = x.second - i + tail[i].second;
      if (!mark[u][v]) {
        mark[u][v] = mark[x.first][x.second] + 1;
        q.push(make_pair(u, v));
      }
    }
  }
  if (mark[0][0]) {
    cout << "Ivan" << endl << mark[0][0] - 1 << endl;
    return 0;
  }
  memset(mark, 0, sizeof mark);
  dfs(h, t);
  memset(mark, 0, sizeof mark);
  reverse(topol.begin(), topol.end());
  for (int i = 0; i < topol.size(); i++)
    mark[topol[i].first][topol[i].second] = i + 1;
  for (int k = 0; k < topol.size(); k++) {
    pair<int, int> x = topol[k];
    for (int i = 1; i <= min(x.first, n); i++) {
      int u = x.first - i + head[i].first;
      int v = x.second + head[i].second;
      if (mark[u][v]) {
        int t = mark[u][v] - 1;
        dp[t] = max(dp[t], dp[k] + 1);
      }
    }
    for (int i = 1; i <= min(x.second, m); i++) {
      int u = x.first + tail[i].first;
      int v = x.second - i + tail[i].second;
      if (mark[u][v]) {
        int t = mark[u][v] - 1;
        dp[t] = max(dp[t], dp[k] + 1);
      }
    }
  }
  cout << "Zmey" << endl;
  cout << *max_element(dp, dp + topol.size()) + 1 << endl;
  return 0;
}
