#include <bits/stdc++.h>
using namespace std;
const int limN = 2e5 + 5;
const int LE = 1e6;
vector<int> adj[limN];
int minP[limN][2];
pair<int, int> ant[limN][2];
bool actv[limN], rch[limN];
bool dfs(int pos) {
  if (rch[pos]) return actv[pos];
  rch[pos] = true;
  actv[pos] = true;
  for (const int &sig : adj[pos])
    if (dfs(sig)) return true;
  actv[pos] = false;
  return false;
}
void printAns(const pair<int, int> pos) {
  if (pos.first == 0) return;
  printAns(ant[pos.first][pos.second]);
  printf("%d ", pos.first);
}
int main() {
  bool hasCicl = false;
  int N, E;
  pair<int, int> pos;
  int ini;
  queue<pair<int, int> > Q;
  scanf("%d%d", &N, &E);
  for (int i = 1; i <= N; i++) {
    int w;
    scanf("%d", &w);
    adj[i].resize(w);
    for (int &second : adj[i]) scanf("%d", &second);
  }
  scanf("%d", &pos.first);
  ini = pos.first;
  minP[pos.first][pos.second] = 1;
  Q.push(pos);
  while (!Q.empty()) {
    pos = Q.front();
    Q.pop();
    if (adj[pos.first].empty() && pos.second == 1 &&
        minP[pos.first][pos.second] < LE) {
      printf("Win\n");
      printAns(pos);
      printf("\n");
      return 0;
    }
    if (minP[pos.first][pos.second] >= LE) {
      hasCicl = true;
      break;
    }
    int sp = 1 - pos.second, d = minP[pos.first][pos.second] + 1;
    for (const int &sig : adj[pos.first]) {
      if (minP[sig][sp]) continue;
      Q.push({sig, sp});
      minP[sig][sp] = d;
      ant[sig][sp] = pos;
    }
  }
  if (!hasCicl) hasCicl |= dfs(ini);
  printf("%s\n", hasCicl ? "Draw" : "Lose");
}
