#include <bits/stdc++.h>
using namespace std;
const int N = 200 * 200 + 100;
int H, T, R, h[N], t[N], d[N], n, m, cnt, par[N];
bool vis[N];
vector<int> adj[N], jda[N], L;
struct vertex {
  int a, b;
  vertex(int x = 0, int y = 0) { a = x, b = y; }
  vertex apply(int i) {
    if (i >= n) {
      if (b < i - n + 1) return vertex(-1, -1);
      return vertex(a + h[i], b - (i - n + 1) + t[i]);
    }
    if (a < i + 1) return vertex(-1, -1);
    return vertex(a - i - 1 + h[i], b + t[i]);
  }
  bool operator<(const vertex &x) const {
    return make_pair(a, b) < make_pair(x.a, x.b);
  }
} V[N];
map<vertex, int> indx;
void in_that_case() {
  int s = indx[vertex(0, 0)], haha = indx[vertex(H, T)];
  fill(par, par + N, -1);
  queue<int> q;
  q.push(s), d[s] = 0;
  while (q.size()) {
    int v = q.front();
    q.pop();
    if (v == haha) {
      cout << "Ivan\n" << d[v] << '\n';
      exit(0);
    }
    for (auto u : jda[v])
      if (d[v] + 1 < d[u]) {
        d[u] = d[v] + 1;
        par[u] = v;
        q.push(u);
      }
  }
}
void dfs(int v) {
  vis[v] = true;
  for (auto u : adj[v])
    if (!vis[u]) dfs(u);
  L.push_back(v);
}
void in_the_other_case() {
  int s = indx[vertex(H, T)];
  dfs(s);
  int sz = (int)(L.size());
  vector<int> pos(N), dp(N, 0);
  for (int i = 0; i < sz; i++) pos[L[i]] = i;
  for (auto v : L)
    for (auto u : adj[v])
      if (pos[u] >= pos[v]) {
        cout << "Draw\n";
        exit(0);
      }
  for (auto v : L)
    for (auto u : adj[v]) dp[v] = max(dp[v], dp[u] + 1);
  cout << "Zmey\n";
  cout << dp[indx[vertex(H, T)]] + 1 << '\n';
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> H >> T >> R;
  cin >> n;
  for (int i = 0; i < n; i++) cin >> h[i] >> t[i];
  cin >> m;
  for (int i = 0; i < m; i++) cin >> h[n + i] >> t[n + i];
  for (int i = 0; i <= R; i++)
    for (int j = 0; j <= i; j++) {
      V[cnt] = vertex(j, i - j);
      indx[V[cnt]] = cnt;
      d[cnt] = 1 << 30;
      cnt++;
    }
  for (int i = 0; i < cnt; i++)
    for (int j = 0; j < n + m; j++) {
      vertex tmp = V[i].apply(j);
      if (!indx.count(tmp)) continue;
      int u = indx[tmp];
      adj[i].push_back(u);
      jda[u].push_back(i);
    }
  in_that_case();
  in_the_other_case();
  return 0;
}
