#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5;
vector<int> gr[MAX_N];
int indx(int h, int t) { return h * 450 + t; }
int win = 1e9;
int lose = 0;
bool draw = false;
int used[MAX_N] = {0};
void bfs(int st_indx) {
  queue<pair<int, int>> q;
  q.push({0, st_indx});
  used[st_indx] = 1;
  while (!q.empty()) {
    auto [d, v] = q.front();
    q.pop();
    if (v == 0) {
      win = min(win, d);
    }
    for (auto e : gr[v]) {
      if (!used[e]) {
        used[e] = 1;
        q.push({d + 1, e});
      }
    }
  }
}
void dfs(int v) {
  used[v] = 1;
  for (auto e : gr[v]) {
    if (used[e] == 1) {
      draw = true;
    } else if (!used[e]) {
      dfs(e);
    }
  }
  used[v] = 2;
}
int d[MAX_N];
void dij(int st) {
  fill(d, d + MAX_N, 1e9);
  set<pair<int, int>> s;
  d[st] = 0;
  s.insert({0, st});
  while (!s.empty()) {
    int v = s.begin()->second;
    if (gr[v].empty()) {
      lose = max(lose, -d[v]);
    }
    s.erase(s.begin());
    for (auto e : gr[v]) {
      if (d[e] > d[v] - 1) {
        s.erase({d[e], e});
        d[e] = d[v] - 1;
        s.insert({d[e], e});
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int h, t, r, n;
  cin >> h >> t >> r >> n;
  vector<pair<int, int>> a(n + 1);
  for (int i = 1; i <= n; ++i) {
    cin >> a[i].first >> a[i].second;
  }
  int m;
  cin >> m;
  vector<pair<int, int>> b(m + 1);
  for (int i = 1; i <= m; ++i) {
    cin >> b[i].first >> b[i].second;
  }
  for (int h1 = 0; h1 <= r; ++h1) {
    for (int t1 = 0; t1 <= r; ++t1) {
      if (h1 + t1 > r || !(h1 + t1)) {
        continue;
      }
      for (int chop_h = 1; chop_h <= min(h1, n); ++chop_h) {
        int h2 = h1 - chop_h + a[chop_h].first;
        int t2 = t1 + a[chop_h].second;
        gr[indx(h1, t1)].push_back(indx(h2, t2));
      }
      for (int chop_t = 1; chop_t <= min(t1, m); ++chop_t) {
        int h2 = h1 + b[chop_t].first;
        int t2 = t1 - chop_t + b[chop_t].second;
        gr[indx(h1, t1)].push_back(indx(h2, t2));
      }
    }
  }
  bfs(indx(h, t));
  memset(used, 0, sizeof(used));
  dfs(indx(h, t));
  if (win != 1e9) {
    cout << "Ivan\n" << win;
  } else if (draw) {
    cout << "Draw";
  } else {
    dij(indx(h, t));
    cout << "Zmey\n" << lose;
  }
  return 0;
}
