#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int re = 0, flag = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch = '-') flag = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    re = (re << 1) + (re << 3) + ch - '0', ch = getchar();
  return re * flag;
}
int n, cnt, first[1000010], ecnt[1000010], op, dfn[1000010], low[1000010], clk;
vector<int> edge[1000010];
bool mark;
struct Edge {
  int to, next;
} a[5000010];
stack<int> s;
bool in[100010];
void tarjan(int u) {
  dfn[u] = low[u] = ++clk;
  s.push(u);
  in[u] = 1;
  int i, v;
  for (i = 0; i < edge[u].size(); i++) {
    v = edge[u][i];
    if (!dfn[v]) {
      tarjan(v);
      low[u] = min(low[u], low[v]);
    } else if (in[v])
      low[u] = min(low[u], dfn[v]);
  }
  if (low[u] == dfn[u]) {
    cnt++;
    v = 0;
    while (v != u) {
      v = s.top();
      s.pop();
      in[v] = 0;
    }
  }
}
inline void add(int u, int v) {
  a[++cnt] = (Edge){v, first[u]};
  first[u] = cnt;
}
bool vis[2000010];
int pre[2000010];
void dfs(int u) {
  int i, v;
  vis[u] = 1;
  for (i = first[u]; ~i; i = a[i].next) {
    v = a[i].to;
    if (vis[v]) continue;
    pre[v] = u;
    dfs(v);
  }
}
int main() {
  memset(first, -1, sizeof(first));
  int i, j, t1, t2;
  n = read();
  int m = read();
  for (i = 1; i <= n; i++) {
    ecnt[i] = read();
    for (j = 1; j <= ecnt[i]; j++) t2 = read(), edge[i].push_back(t2);
  }
  op = read();
  tarjan(op);
  mark = (cnt != clk);
  cnt = 0;
  for (i = 1; i <= n; i++) {
    for (j = 0; j < ecnt[i]; j++) {
      add(i, edge[i][j] + n);
      add(i + n, edge[i][j]);
    }
  }
  dfs(op);
  for (i = 1; i <= n; i++) {
    if (ecnt[i] == 0 && vis[i + n]) {
      printf("Win\n");
      i = i + n;
      vector<int> ans;
      while (i) {
        ans.push_back((i > n) ? (i - n) : i);
        i = pre[i];
      }
      for (j = ans.size() - 1; j >= 0; j--) printf("%d ", ans[j]);
      return 0;
    }
  }
  if (mark)
    printf("Draw\n");
  else
    printf("Lose\n");
}
