#include <bits/stdc++.h>
using namespace std;
const long long int Maxn = 200 + 5, Mod = 1000 * 1000 * 1000 + 7;
int die_time, mrk[Maxn][Maxn], dis[Maxn][Maxn], dismx[Maxn][Maxn];
pair<int, int> strt;
vector<pair<int, int> > adj[Maxn][Maxn], par[Maxn][Maxn], topol_sort;
bool win, c, mrkp1[Maxn][Maxn], mrkp2[Maxn][Maxn], mrkk[Maxn][Maxn];
void cl() {
  for (int i = 0; i <= die_time; i++)
    for (int j = 0; j <= die_time; j++) mrkp1[i][j] = 0, mrkp2[i][j] = 0;
  return;
}
void ae(pair<int, int> v, pair<int, int> u) {
  adj[v.first][v.second].push_back(u);
  par[u.first][u.second].push_back(v);
  return;
}
void ae_all() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int hi, ti;
    cin >> hi >> ti;
    for (int h = i; h <= die_time; h++)
      for (int t = 0; t + h <= die_time; t++)
        if (h - i + hi + t + ti <= die_time) ae({h, t}, {h - i + hi, t + ti});
  }
  int m;
  cin >> m;
  for (int i = 1; i <= m; i++) {
    int hi, ti;
    cin >> hi >> ti;
    for (int t = i; t <= die_time; t++)
      for (int h = 0; t + h <= die_time; h++)
        if (t - i + ti + h + hi <= die_time) ae({h, t}, {h + hi, t - i + ti});
  }
  return;
}
void dfs(pair<int, int> v) {
  mrk[v.first][v.second] = 1;
  for (int i = 0; i < adj[v.first][v.second].size(); i++) {
    pair<int, int> u = adj[v.first][v.second][i];
    if (mrk[u.first][u.second] == 0) {
      dfs(u);
    } else if (mrk[u.first][u.second] == 1) {
      c = true;
    }
  }
  mrk[v.first][v.second] = 2;
  topol_sort.push_back(v);
  if (!v.first && !v.second) win = 1;
  return;
}
deque<pair<int, int> > d;
void bfs(pair<int, int> v) {
  d.push_back(v);
  mrkk[v.first][v.second] = 1;
  while (d.size()) {
    pair<int, int> x = d.front();
    d.pop_front();
    for (int i = 0; i < adj[x.first][x.second].size(); i++) {
      pair<int, int> u = adj[x.first][x.second][i];
      if (!mrkk[u.first][u.second])
        mrkk[u.first][u.second] = 1,
        dis[u.first][u.second] = dis[x.first][x.second] + 1, d.push_back(u);
    }
  }
}
void find_mxdis() {
  for (int i = 0; i < topol_sort.size(); i++) {
    pair<int, int> u = topol_sort[i];
    for (int j = 0; j < par[u.first][u.second].size(); j++) {
      pair<int, int> v = par[u.first][u.second][j];
      if (mrkp1[v.first][v.second] &&
          (v.first != u.first || v.second != u.second)) {
        if (dismx[u.first][u.second])
          dismx[u.first][u.second] =
              max(dismx[u.first][u.second], dismx[v.first][v.second] + 1);
        else
          dismx[u.first][u.second] = dismx[v.first][v.second] + 1;
      }
    }
    mrkp1[u.first][u.second] = 1;
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> strt.first >> strt.second >> die_time;
  ae_all();
  dfs(strt);
  reverse(topol_sort.begin(), topol_sort.end());
  find_mxdis();
  bfs(strt);
  if (win) {
    cout << "Ivan\n" << dis[0][0];
  } else if (c) {
    cout << "Draw\n";
  } else {
    cout << "Zmey\n";
    int ans = -1;
    for (int h = 0; h <= die_time; h++)
      for (int t = 0; t <= die_time; t++) ans = max(ans, dismx[h][t]);
    cout << ans + 1;
  }
  return 0;
}
