#include <bits/stdc++.h>
using namespace std;
const int maxx = 204, inf = 1e7 + 20;
int mx = 0, n, m, a, b, r, npx[maxx], dp[maxx][maxx], npy[maxx], mpx[maxx],
    mpy[maxx], d[maxx][maxx], ja[maxx][maxx];
bool vis[maxx][maxx], infinite = false;
queue<pair<int, int> > q;
vector<pair<int, int> > v;
void dfs(int x, int y) {
  vis[x][y] = true;
  for (int i = 1; i <= min(n, x); i++) {
    int nx = x - i, ny = y;
    nx += npx[i];
    ny += npy[i];
    if (nx + ny > r) continue;
    if (!vis[nx][ny]) dfs(nx, ny);
  }
  for (int i = 1; i <= min(m, y); i++) {
    int nx = x, ny = y - i;
    nx += mpx[i];
    ny += mpy[i];
    if (nx + ny > r) continue;
    if (!vis[nx][ny]) dfs(nx, ny);
  }
  v.push_back({x, y});
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> a >> b >> r;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> npx[i] >> npy[i];
  cin >> m;
  for (int i = 1; i <= m; i++) cin >> mpx[i] >> mpy[i];
  for (int i = 0; i < maxx; i++)
    for (int j = 0; j < maxx; j++) d[i][j] = inf;
  d[a][b] = 0;
  q.push({a, b});
  vis[a][b] = true;
  while (q.size()) {
    pair<int, int> e = q.front();
    q.pop();
    int x = e.first, y = e.second;
    mx = max(mx, d[x][y]);
    for (int i = 1; i <= min(n, x); i++) {
      int nx = x - i, ny = y;
      nx += npx[i];
      ny += npy[i];
      if (nx + ny > r) continue;
      if (!vis[nx][ny])
        d[nx][ny] = d[x][y] + 1, vis[nx][ny] = true, q.push({nx, ny});
    }
    for (int i = 1; i <= min(m, y); i++) {
      int nx = x, ny = y - i;
      nx += mpx[i];
      ny += mpy[i];
      if (nx + ny > r) continue;
      if (!vis[nx][ny])
        d[nx][ny] = d[x][y] + 1, vis[nx][ny] = true, q.push({nx, ny});
    }
  }
  if (vis[0][0]) return cout << "Ivan" << endl << d[0][0] << endl, 0;
  memset(vis, false, sizeof vis);
  dfs(a, b);
  reverse(v.begin(), v.end());
  for (int i = 0; i < v.size(); i++) {
    pair<int, int> e = v[i];
    ja[e.first][e.second] = i;
  }
  for (pair<int, int> e : v) {
    int x = e.first, y = e.second;
    for (int i = 1; i <= min(n, x); i++) {
      int nx = x - i, ny = y;
      nx += npx[i];
      ny += npy[i];
      if (nx + ny > r) continue;
      if (ja[nx][ny] <= ja[x][y]) return cout << "Draw" << endl, 0;
    }
    for (int i = 1; i <= min(m, y); i++) {
      int nx = x, ny = y - i;
      nx += mpx[i];
      ny += mpy[i];
      if (nx + ny > r) continue;
      if (ja[nx][ny] <= ja[x][y]) return cout << "Draw" << endl, 0;
    }
  }
  dp[a][b] = 0;
  mx = 0;
  for (int i = 0; i < v.size(); i++) {
    int x = v[i].first, y = v[i].second;
    mx = max(mx, dp[x][y]);
    for (int i = 1; i <= min(n, x); i++) {
      int nx = x - i, ny = y;
      nx += npx[i];
      ny += npy[i];
      if (nx + ny > r) continue;
      dp[nx][ny] = max(dp[nx][ny], dp[x][y] + 1);
    }
    for (int i = 1; i <= min(m, y); i++) {
      int nx = x, ny = y - i;
      nx += mpx[i];
      ny += mpy[i];
      if (nx + ny > r) continue;
      dp[nx][ny] = max(dp[nx][ny], dp[x][y] + 1);
    }
  }
  cout << "Zmey" << endl << mx + 1 << endl;
  return 0;
}
