#include <bits/stdc++.h>
using namespace std;
int const bound = 1e6 + 2, N = 2e5 + 1;
long long OO = 1e18;
double eps = 1e-6;
int oo = 1e9, mod = 1e9 + 7;
int n, m, s, app[N][2];
pair<int, int> par[N][2];
vector<int> adj[N], rev[N];
queue<pair<int, int> > q;
int vis[N];
void buildpath() {
  puts("Win");
  int cur = s, c = 1;
  while (cur != -1) {
    printf("%d ", cur);
    pair<int, int> ne = par[cur][c];
    cur = ne.first;
    c = ne.second;
  }
}
bool cyc(int u) {
  vis[u] = 2;
  for (auto v : rev[u]) {
    if (vis[v] == 2) return 1;
    if (!vis[v] && cyc(v)) return 1;
  }
  vis[u] = 1;
  return 0;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int(i) = 1; (i) <= (n); (i)++) {
    int sz;
    scanf("%d", &sz);
    if (!sz) {
      q.push({i, 0});
      app[i][0] = 1;
      par[i][0] = {-1, -1};
    }
    while (sz--) {
      int a;
      scanf("%d", &a);
      adj[a].push_back(i);
      rev[i].push_back(a);
    }
  }
  scanf("%d", &s);
  while (!q.empty()) {
    pair<int, int> cur = q.front();
    q.pop();
    for (auto v : adj[cur.first]) {
      int cost = cur.second + 1;
      int md = cost % 2;
      if (app[v][md]) continue;
      app[v][md] = 1;
      par[v][md] = {cur.first, cur.second};
      if (v == s && md) {
        buildpath();
        return 0;
      }
      q.push({v, cost % 2});
    }
  }
  if (cyc(s)) {
    puts("Draw");
    return 0;
  }
  puts("Lose");
  return 0;
}
