#include <bits/stdc++.h>
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("O8")
#pragma GCC optimization("unroll-loops")
using namespace std;
const long long int N = 2e2 + 20, mod = 1e9 + 7, inf = 1e12, maxq = 5e5 + 30,
                    maxm = 3e5 + 30;
const long double eps = 0.0000001;
long long int poww(long long int a, long long int b) {
  return (!b ? 1
             : (b & 1 ? a * poww(a * a % mod, b / 2) % mod
                      : poww(a * a % mod, b / 2) % mod));
}
long long int h, t, r, n, m;
pair<long long int, long long int> a[N], b[N];
long long int d[N][N], dp[N][N];
int vis[N][N];
void bfs() {
  queue<pair<long long int, long long int> > q;
  q.push({h, t});
  d[h][t] = 0;
  while (!q.empty()) {
    pair<long long int, long long int> p = q.front();
    q.pop();
    if (!p.first && !p.second) return;
    long long int m1 = min(m, p.second);
    for (int i = 1; i < m1 + 1; i++) {
      if (p.second + b[i].first + b[i].second - i + p.first > r) continue;
      if (d[p.first + b[i].first][p.second + b[i].second - i] >
          d[p.first][p.second] + 1) {
        d[p.first + b[i].first][p.second + b[i].second - i] =
            d[p.first][p.second] + 1;
        q.push({p.first + b[i].first, p.second + b[i].second - i});
      }
    }
    long long int n1 = min(n, p.first);
    for (int i = 1; i < n1 + 1; i++) {
      if (p.first + a[i].first + a[i].second - i + p.second > r) continue;
      if (d[p.first + a[i].first - i][p.second + a[i].second] >
          d[p.first][p.second] + 1) {
        d[p.first + a[i].first - i][p.second + a[i].second] =
            d[p.first][p.second] + 1;
        q.push({p.first + a[i].first - i, p.second + a[i].second});
      }
    }
  }
}
bool dfs(pair<long long int, long long int> p) {
  vis[p.first][p.second] = 1;
  int n1 = min(n, p.first), m1 = min(m, p.second);
  for (int i = 1; i < n1 + 1; i++) {
    if (p.first + a[i].first + a[i].second + p.second - i > r) continue;
    if (vis[p.first + a[i].first - i][p.second + a[i].second] == 1) {
      return 1;
    }
    if (vis[p.first + a[i].first - i][p.second + a[i].second] == 2) continue;
    if (dfs({p.first + a[i].first - i, p.second + a[i].second})) return 1;
  }
  for (int i = 1; i < m1 + 1; i++) {
    if (p.first + b[i].first + b[i].second + p.second - i > r) continue;
    if (vis[p.first + b[i].first][p.second + b[i].second - i] == 1) {
      return 1;
    }
    if (vis[p.first + b[i].first][p.second + b[i].second - i] == 2) continue;
    if (dfs({p.first + b[i].first, p.second + b[i].second - i})) return 1;
  }
  vis[p.first][p.second] = 2;
  return 0;
}
void dfs2(long long int x, long long int y) {
  long long int n1 = min(n, x), m1 = min(m, y), mx = -1;
  if (x + y > r) {
    dp[x][y] = 0;
    return;
  }
  for (int i = 1; i < n1 + 1; i++) {
    if (x + y + a[i].first + a[i].second - i > r) continue;
    if (x + a[i].first - i == 300 && a[i].second + y == 200)
      cerr << "dp[x + a[i].X - i][a[i].Y + y]"
           << ": " << dp[x + a[i].first - i][a[i].second + y] << '\n';
    ;
    if (dp[x + a[i].first - i][a[i].second + y] == -1)
      dfs2(x + a[i].first - i, y + a[i].second);
    if (x + a[i].first - i == 300 && a[i].second + y == 200)
      cerr << "dp[x + a[i].X - i][a[i].Y + y]"
           << ": " << dp[x + a[i].first - i][a[i].second + y] << '\n';
    ;
    if (x == 1 && y == 99 && dp[x + a[i].first - i][y + a[i].second] > mx) {
    }
    mx = max(mx, dp[x + a[i].first - i][y + a[i].second]);
  }
  for (int i = 1; i < m1 + 1; i++) {
    if (x + y + b[i].first + b[i].second - i > r) continue;
    if (x + b[i].first == 300 && y + b[i].second - i == 200)
      cerr << "dp[x + b[i].X][y + b[i].Y - i]"
           << ": " << dp[x + b[i].first][y + b[i].second - i] << '\n';
    ;
    if (dp[x + b[i].first][b[i].second + y - i] == -1)
      dfs2(x + b[i].first, y + b[i].second - i);
    if (x == 1 && y == 99 && dp[x + b[i].first][y + b[i].second - i] > mx) {
    }
    mx = max(mx, dp[x + b[i].first][y + b[i].second - i]);
  }
  dp[x][y] = mx + 1;
  if (x == 300 && y == 200)
    cerr << "mx + 1"
         << ": " << mx + 1 << '\n';
  ;
}
int main() {
  memset(d, 63, sizeof d);
  for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++) dp[i][j] = -1;
  cin >> h >> t >> r;
  cin >> n;
  for (int i = 1; i < n + 1; i++) cin >> a[i].first >> a[i].second;
  cin >> m;
  for (int i = 1; i < m + 1; i++) cin >> b[i].first >> b[i].second;
  bfs();
  if (d[0][0] < inf) {
    cout << "Ivan" << '\n' << d[0][0];
    return 0;
  }
  if (dfs({h, t})) {
    cout << "Draw";
    return 0;
  }
  cout << "Zmey" << '\n';
  dfs2(h, t);
  cout << dp[h][t] + 1 << '\n';
  cerr << "dp[300][200]"
       << ": " << dp[300][200] << '\n';
  ;
  return 0;
}
