#include <bits/stdc++.h>
using namespace std;
const int MAXN = 400 + 10, INF = 100000;
bool markB[MAXN][MAXN], markD[MAXN][MAXN], see[MAXN][MAXN];
int h, t, r, n, m, dp[MAXN][MAXN], d[MAXN][MAXN];
pair<int, int> inn[MAXN], inm[MAXN];
vector<pair<int, int> > nei[MAXN][MAXN], sot;
void input() {
  cin >> h >> t >> r >> n;
  for (int i = 1; i <= n; i++) cin >> inn[i].first >> inn[i].second;
  cin >> m;
  for (int i = 1; i <= m; i++) cin >> inm[i].first >> inm[i].second;
}
void make() {
  for (int i = 0; i <= 200; i++) {
    for (int j = 0; j <= 200; j++) {
      if (i + j > r) continue;
      int he = i, ta = j;
      for (int x = 1; x <= min(n, i); x++) {
        he = i, ta = j;
        he -= x;
        he += inn[x].first;
        ta += inn[x].second;
        nei[i][j].push_back(make_pair(he, ta));
      }
      for (int x = 1; x <= min(m, j); x++) {
        he = i, ta = j;
        ta -= x;
        he += inm[x].first;
        ta += inm[x].second;
        nei[i][j].push_back(make_pair(he, ta));
      }
      sort(nei[i][j].begin(), nei[i][j].end());
      vector<pair<int, int> >::iterator it =
          unique(nei[i][j].begin(), nei[i][j].end());
      nei[i][j].resize(distance(nei[i][j].begin(), it));
    }
  }
}
void dfs(int x, int y) {
  markD[x][y] = see[x][y] = true;
  for (int i = 0; i < (int)nei[x][y].size(); i++) {
    int u = nei[x][y][i].first, v = nei[x][y][i].second;
    if (!markD[u][v]) {
      if (u + v <= r) dfs(u, v);
    } else if (see[u][v])
      throw 1;
  }
  see[x][y] = false;
  sot.push_back(make_pair(x, y));
}
void bfs() {
  queue<pair<int, int> > que;
  dp[h][t] = 0;
  markB[h][t] = 1;
  que.push(make_pair(h, t));
  while (que.size()) {
    pair<int, int> v = que.front();
    que.pop();
    int a = v.first, b = v.second;
    if (a + b > r) continue;
    for (int i = 0; i < (int)nei[a][b].size(); i++) {
      pair<int, int> u = nei[a][b][i];
      if (!markB[u.first][u.second]) {
        markB[u.first][u.second] = true;
        dp[u.first][u.second] = dp[a][b] + 1;
        que.push(u);
      }
    }
  }
}
void dy() {
  for (int i = 0; i < (int)sot.size(); i++) {
    int s = sot[i].first, e = sot[i].second;
    for (int j = 0; j < (int)nei[s][e].size(); j++)
      d[s][e] = max(d[s][e], d[nei[s][e][j].first][nei[s][e][j].second] + 1);
  }
}
void solve() {
  bfs();
  if (markB[0][0]) {
    cout << "Ivan" << endl;
    cout << dp[0][0] << endl;
    return;
  }
  try {
    dfs(h, t);
    dy();
    cout << "Zmey" << endl << d[h][t] << endl;
  } catch (int x) {
    cout << "Draw" << endl;
  }
}
int main() {
  input();
  make();
  solve();
  return 0;
}
