#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
const int maxx = 3e5;
const int inf = 0x3f3f3f3f;
const long long linf = 1e9;
const long long mod = 1e9 + 7;
int n, m, k;
struct EDGE {
  int v, nxt;
} edge[2 * maxn];
int tot, head[maxn], out[maxn], vis[maxn][2], flag[maxn], ff;
void init() {
  tot = 0, ff = 0;
  memset(head, -1, sizeof(head));
  memset(out, 0, sizeof(out));
  memset(vis, 0, sizeof(vis));
  memset(flag, 0, sizeof(flag));
}
void addEdge(int u, int v) {
  edge[tot].v = v, edge[tot].nxt = head[u], head[u] = tot++;
}
void dfs(int u) {
  flag[u] = 1;
  for (int i = head[u]; i != -1; i = edge[i].nxt) {
    int v = edge[i].v;
    if (flag[v] == 1) {
      ff = 1;
      return;
    } else if (flag[v] == 0)
      dfs(v);
  }
  flag[u] = 2;
}
void bfs(int u) {
  vis[u][0] = -1;
  queue<pair<int, int> > q;
  q.push(make_pair(u, 0));
  while (q.empty() == 0) {
    pair<int, int> now = q.front();
    q.pop();
    for (int i = head[now.first]; i != -1; i = edge[i].nxt) {
      int v = edge[i].v;
      int tmp = now.second ^ 1;
      if (vis[v][tmp] == 0) {
        vis[v][tmp] = now.first;
        q.push(make_pair(v, tmp));
      }
    }
  }
}
void print(int pre, int x) {
  if (vis[pre][x ^ 1] != -1) print(vis[pre][x ^ 1], x ^ 1);
  cout << pre << " ";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  init();
  int cnt, a;
  for (int i = 1; i <= n; i++) {
    cin >> cnt;
    out[i] = cnt;
    while (cnt--) {
      cin >> a;
      addEdge(i, a);
    }
  }
  cin >> k;
  bfs(k);
  for (int i = 1; i <= n; i++) {
    if (out[i] == 0) {
      if (vis[i][1]) {
        cout << "Win" << endl;
        print(vis[i][1], 1);
        cout << i << endl;
        return 0;
      }
    }
  }
  dfs(k);
  if (ff)
    cout << "Draw" << endl;
  else
    cout << "Lose" << endl;
  return 0;
}
