#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T mod_v(T num) {
  if (num >= 0)
    return num % 1000000007;
  else
    return (num % 1000000007 + 1000000007) % 1000000007;
}
template <class T>
inline T gcd(T a, T b) {
  a = abs(a);
  b = abs(b);
  while (b) b ^= a ^= b ^= a %= b;
  return a;
}
template <class T>
T fast_pow(T n, T p) {
  if (p == 0) return 1;
  if (p % 2) {
    T g = mod_v(mod_v(n) * mod_v(fast_pow(n, p - 1)));
    return g;
  } else {
    T g = fast_pow(n, p / 2);
    g = mod_v(mod_v(g) * mod_v(g));
    return g;
  }
}
template <class T>
inline T modInverse(T n) {
  return fast_pow(n, 1000000007 - 2);
}
template <class T>
inline void debug(string S1, T S2, string S3) {
  cout << S1 << S2 << S3;
}
bool equalTo(double a, double b) {
  if (fabs(a - b) <= 1e-9)
    return true;
  else
    return false;
}
bool notEqual(double a, double b) {
  if (fabs(a - b) > 1e-9)
    return true;
  else
    return false;
}
bool lessThan(double a, double b) {
  if (a + 1e-9 < b)
    return true;
  else
    return false;
}
bool lessThanEqual(double a, double b) {
  if (a < b + 1e-9)
    return true;
  else
    return false;
}
bool greaterThan(double a, double b) {
  if (a > b + 1e-9)
    return true;
  else
    return false;
}
bool greaterThanEqual(double a, double b) {
  if (a + 1e-9 > b)
    return true;
  else
    return false;
}
template <class T>
inline int in(register T& num) {
  register char c = 0;
  num = 0;
  bool n = false;
  while (c < 33) c = getchar();
  while (c > 33) {
    if (c == '-')
      n = true;
    else
      num = num * 10 + c - '0';
    c = getchar();
  }
  num = n ? -num : num;
  return 1;
}
vector<int> lst[100005];
int mark[100005][2];
int par[100005][2];
int deg[100005];
int n, m, s;
int dfs(int nod, int st) {
  if (!deg[nod]) {
    if (st) return nod;
    return 0;
  }
  int ok = 0;
  for (auto i : lst[nod]) {
    if (!mark[i][1 - st]) {
      mark[i][1 - st] = 1;
      par[i][1 - st] = nod;
      ok = max(ok, dfs(i, 1 - st));
    }
  }
  return ok;
}
bool cycle(int nod) {
  if (mark[nod][0] == 1) {
    return true;
  }
  if (mark[nod][0] == 2) return false;
  mark[nod][0] = 1;
  for (auto i : lst[nod]) {
    if (mark[i][0] != 2 and cycle(i)) return true;
  }
  mark[nod][0] = 2;
  return false;
}
int main() {
  in(n), in(m);
  for (int i = 1; i <= n; i++) {
    int c, v;
    in(c);
    deg[i] = (c != 0);
    while (c--) {
      in(v);
      lst[i].push_back(v);
    }
  }
  int s;
  in(s);
  mark[s][0] = 1;
  par[s][0] = -1;
  int res = dfs(s, 0);
  if (res) {
    stack<int> st;
    int p = 1;
    while (res != -1) {
      st.push(res);
      res = par[res][p];
      p = 1 - p;
    }
    printf("Win\n");
    while (!st.empty()) {
      printf("%d ", st.top());
      st.pop();
    }
  } else {
    memset(mark, 0, sizeof(mark));
    ;
    if (cycle(s))
      printf("Draw");
    else
      printf("Lose");
  }
  return 0;
}
