#include <bits/stdc++.h>
using namespace std;
const int maxn = 100009;
int first[maxn], du[maxn], pre[maxn][2];
struct edg {
  int next, to;
} e[maxn << 1];
struct node {
  int x, opt;
};
bool vis[maxn][2], ins[maxn], ok[maxn];
queue<node> q;
int n, m, s, e_sum;
bool flag;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
void add_edg(int x, int y) {
  e_sum++;
  e[e_sum].next = first[x];
  first[x] = e_sum;
  e[e_sum].to = y;
}
void print(int x, int opt) {
  if (x == s && opt == 0) {
    printf("%d ", x);
    return;
  }
  print(pre[x][opt], opt ^ 1);
  printf("%d ", x);
}
void dfs(int x) {
  ok[x] = ins[x] = 1;
  for (int i = first[x]; i; i = e[i].next) {
    int w = e[i].to;
    if (ins[w]) flag = 1;
    if (!ok[w]) dfs(w);
  }
  ins[x] = 0;
}
int main() {
  n = read();
  m = read();
  for (int i = 1; i <= n; i++) {
    du[i] = read();
    for (int j = 1; j <= du[i]; j++) {
      int x = read();
      add_edg(i, x);
    }
  }
  s = read();
  q.push((node){s, 0});
  vis[s][0] = 1;
  while (!q.empty()) {
    int x = q.front().x, opt = q.front().opt;
    q.pop();
    for (int i = first[x]; i; i = e[i].next) {
      int w = e[i].to;
      if (!vis[w][opt ^ 1]) {
        vis[w][opt ^ 1] = 1;
        pre[w][opt ^ 1] = x;
        q.push((node){w, opt ^ 1});
      }
    }
  }
  for (int i = 1; i <= n; i++)
    if (du[i] == 0 && vis[i][1]) {
      puts("Win");
      print(i, 1);
      return 0;
    }
  dfs(s);
  if (flag)
    puts("Draw");
  else
    puts("Lose");
  return 0;
}
