#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
inline void read(long long &x) {
  x = 0;
  long long f = 1;
  char s = getchar();
  while (s < '0' || s > '9') {
    if (s == '-') f = -1;
    s = getchar();
  }
  while (s >= '0' && s <= '9') {
    x = (x << 3) + (x << 1) + (s ^ 48);
    s = getchar();
  }
  x *= f;
}
inline long long Max(long long x, long long y) { return x > y ? x : y; }
inline long long Min(long long x, long long y) { return x < y ? x : y; }
long long Gcd(long long a, long long b) {
  if (!b) return a;
  return Gcd(b, a % b);
}
inline long long Abs(long long x) {
  if (x < 0) return -x;
  return x;
}
inline double Fabs(double x) {
  if (x > 0) return x;
  return -x;
}
vector<long long> G[500005];
bool Instack[500005], vis[500005][2], Huan;
vector<long long> S;
void Dfs(long long x, long long Dep) {
  if (vis[x][Dep & 1]) return;
  vis[x][Dep & 1] = 1;
  int len = G[x].size();
  if (!len && Dep & 1) {
    printf("Win\n");
    int l = S.size();
    for (register int i = 0; i < l; ++i) printf("%lld ", S[i]);
    exit(0);
  }
  for (register int i = 0; i < len; ++i) {
    long long to = G[x][i];
    if (Instack[to]) Huan = 1;
    S.push_back(to);
    Instack[to] = 1;
    Dfs(to, Dep + 1);
    S.pop_back();
    Instack[to] = 0;
  }
}
int main() {
  long long n, m;
  read(n);
  read(m);
  for (register int i = 1; i <= n; ++i) {
    long long Num;
    read(Num);
    while (Num--) {
      long long v;
      read(v);
      G[i].push_back(v);
    }
  }
  long long s;
  read(s);
  S.push_back(s);
  Instack[s] = 1;
  Dfs(s, 0);
  if (Huan)
    printf("Draw\n");
  else
    printf("Lose");
  return 0;
}
