#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e9, MOD = INF + 7;
long long gcd(long long a, long long b) { return (b ? gcd(b, a % b) : a); }
long long power(long long a, long long b) {
  return (!b ? 1 : power(a, b / 2) * power(a, b / 2) * (b % 2 ? a : 1));
}
long long mod(long long a) { return (a % MOD + MOD) % MOD; }
const long long N = 2e2 + 20;
pair<long long, long long> head[N];
pair<long long, long long> tail[N];
long long d[N][N];
vector<pair<long long, long long> > g[N][N];
bool marked[N][N], checked[N][N];
long long path[N][N];
bool hasCycle = false;
void dfs(pair<long long, long long> v) {
  marked[v.first][v.second] = true;
  for (pair<long long, long long> u : g[v.first][v.second]) {
    if (!marked[u.first][u.second])
      dfs(u);
    else if (!checked[u.first][u.second])
      hasCycle = true;
    path[v.first][v.second] =
        max(path[v.first][v.second], path[u.first][u.second] + 1);
  }
  checked[v.first][v.second] = true;
}
int32_t main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  pair<long long, long long> begin;
  cin >> begin.first >> begin.second;
  long long R;
  cin >> R;
  long long n;
  cin >> n;
  for (long long i = 1; i <= n; i++) cin >> head[i].first >> head[i].second;
  long long m;
  cin >> m;
  for (long long i = 1; i <= m; i++) cin >> tail[i].first >> tail[i].second;
  for (long long i = 0; i <= R; i++)
    for (long long j = 0; j <= R; j++)
      if (i + j <= R) {
        for (long long k = 1; k <= min(i, n); k++)
          if ((i - k + head[k].first) + (j + head[k].second) <= R)
            g[i][j].push_back(
                make_pair(i - k + head[k].first, j + head[k].second));
        for (long long k = 1; k <= min(j, m); k++)
          if ((i + tail[k].first) + (j - k + tail[k].second) <= R)
            g[i][j].push_back(
                make_pair(i + tail[k].first, j - k + tail[k].second));
      }
  long long mx = 0;
  memset(d, 63, sizeof d);
  d[begin.first][begin.second] = 0;
  queue<pair<long long, long long> > q;
  q.push(begin);
  while (!q.empty()) {
    pair<long long, long long> v = q.front();
    q.pop();
    for (pair<long long, long long> u : g[v.first][v.second]) {
      if (d[v.first][v.second] + 1 < d[u.first][u.second]) {
        d[u.first][u.second] = d[v.first][v.second] + 1;
        mx = max(mx, d[u.first][u.second]);
        q.push(u);
      }
    }
  }
  if (d[0][0] < INF)
    return cout << "Ivan"
                << "\n"
                << d[0][0] << "\n",
           0;
  dfs(begin);
  if (hasCycle)
    return cout << "Draw"
                << "\n",
           0;
  cout << "Zmey"
       << "\n"
       << path[begin.first][begin.second] + 1 << "\n";
  return 0;
}
