#include <bits/stdc++.h>
using namespace std;
int read() {
  int tmp = 0, fh = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') fh = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    tmp = tmp * 10 + ch - '0';
    ch = getchar();
  }
  return tmp * fh;
}
struct node {
  int data, next;
} e[200010];
int pre[200010][2], cnt[200010], q[200010], low[200010], st[200010],
    dfn[200010], place, ti, head[200010], flag, use[200010], top, num, n, m,
    tag;
void build(int u, int v) {
  e[++place].data = v;
  e[place].next = head[u];
  head[u] = place;
}
void dfs(int x, int tag, int la) {
  pre[x][tag] = la;
  if (tag == 1 && cnt[x] == 0) {
    flag = x;
    return;
  }
  for (int ed = head[x]; ed != 0; ed = e[ed].next)
    if (pre[e[ed].data][tag ^ 1] == 0) {
      dfs(e[ed].data, tag ^ 1, x);
      if (flag != 0) return;
    }
}
void tarjan(int x) {
  tag++;
  use[x] = 1;
  st[++top] = x;
  low[x] = dfn[x] = ++ti;
  for (int ed = head[x]; ed != 0; ed = e[ed].next) {
    if (use[e[ed].data] == 0) {
      tarjan(e[ed].data);
      low[x] = min(low[x], low[e[ed].data]);
    } else if (use[e[ed].data] == 1)
      low[x] = min(low[x], dfn[e[ed].data]);
  }
  if (low[x] == dfn[x]) {
    num++;
    while (st[top] != x) use[st[top--]] = 2;
    use[st[top--]] = 2;
  }
}
int main() {
  n = read(), m = read();
  for (int i = 1; i <= n; i++) {
    cnt[i] = read();
    for (int j = 1; j <= cnt[i]; j++) {
      int u = read();
      build(i, u);
    }
  }
  int s = read();
  dfs(s, 0, -1);
  if (flag != 0) {
    printf("Win\n");
    int len = 0, tag = 1;
    while (flag != s || tag == 1) {
      q[++len] = flag;
      flag = pre[flag][tag];
      tag ^= 1;
    }
    printf("%d", s);
    for (int i = len; i >= 1; i--) printf(" %d", q[i]);
    printf("\n");
    return 0;
  }
  tarjan(s);
  if (num != tag)
    printf("Draw\n");
  else
    printf("Lose\n");
  return 0;
}
