#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000,100000000")
long long max(long long x, long long y) { return x > y ? x : y; }
long long min(long long x, long long y) { return x < y ? x : y; }
using namespace std;
const long long N = 4e2 + 9;
long long t, h, n, m, r, R;
pair<long long, long long> gh[N], gt[N];
vector<pair<long long, long long> > v[N][N];
long long dis[N][N], mx[N][N];
deque<pair<long long, pair<long long, long long> > > q;
long long flag[N][N];
void bfs(long long l, long long h, long long t) {
  if (flag[h][t]) return;
  flag[h][t] = true;
  dis[h][t] = l;
  for (auto it : v[h][t]) q.push_back(make_pair(l + 1, it));
}
long long win() {
  memset(dis, -1, sizeof(dis));
  for (q.push_back(make_pair(0, pair<long long, long long>(h, t))); q.size();
       q.pop_front()) {
    auto beg = q.front();
    if (beg.second.second + beg.second.first <= R)
      bfs(beg.first, beg.second.first, beg.second.second);
  }
  return dis[0][0];
}
long long dfs(long long h, long long t) {
  if (flag[h][t] == 2 || h + t > R) return 0;
  flag[h][t] = 1;
  long long ok = 0;
  for (auto it : v[h][t])
    if (flag[it.first][it.second] == 1)
      ok = 1;
    else if (dfs(it.first, it.second))
      ok = 1;
  flag[h][t] = 2;
  mx[h][t] = 0;
  for (auto it : v[h][t]) mx[h][t] = max(mx[h][t], mx[it.first][it.second] + 1);
  return ok;
}
long long draw(long long h, long long t) {
  memset(flag, 0, sizeof(flag));
  return dfs(h, t);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> h >> t >> R;
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> gh[i].first >> gh[i].second;
    for (long long j = i; j < N; j++)
      for (long long e = 0; e < N; e++) {
        if (j + e > R) continue;
        long long x = max(0, j - i) + gh[i].first, y = e + gh[i].second;
        v[j][e].push_back(pair<long long, long long>(x, y));
      }
  }
  cin >> m;
  for (long long i = 1; i <= m; i++) {
    cin >> gt[i].first >> gt[i].second;
    for (long long j = 0; j < N; j++)
      for (long long e = i; e < N; e++) {
        if (j + e > R) continue;
        long long x = j + gt[i].first, y = max(0, e - i) + gt[i].second;
        v[j][e].push_back(pair<long long, long long>(x, y));
      }
  }
  long long WIN = win();
  long long DRAW = draw(h, t);
  if (WIN != -1)
    cout << "Ivan\n" << WIN;
  else if (DRAW)
    cout << "Draw";
  else
    cout << "Zmey\n" << mx[h][t];
}
