#include <bits/stdc++.h>
using std::abs;
using std::cerr;
using std::cin;
using std::cout;
using std::map;
using std::max;
using std::min;
using std::pair;
using std::reverse;
using std::set;
using std::sort;
using std::string;
using std::swap;
using std::vector;
using ll = long long;
struct __init {
  __init() {
    cin.tie(nullptr);
    std::iostream::sync_with_stdio(false);
    cout << std::fixed << std::setprecision(10);
    cerr << std::fixed << std::setprecision(5);
    std::mt19937 rand(300);
  }
  ~__init() {}
} init;
const ll inf = (ll)1e9 + 7ll;
const int maxn = (int)1e6 + 17;
int n, m, s;
vector<int> g[maxn];
int used[maxn][2], pr[maxn][2];
bool read() {
  if (!(cin >> n >> m)) return false;
  for (ll i = 0; i < (ll)n; ++i) {
    int k;
    cin >> k;
    for (ll j = 0; j < (ll)k; ++j) {
      int v;
      cin >> v;
      g[i].push_back(v - 1);
    }
  }
  cin >> s;
  --s;
  return true;
}
bool dfs_cyc(int v) {
  used[v][0] = 1;
  for (auto to : g[v])
    if (used[to][0] != 2) {
      if (used[to][0] == 1) return true;
      if (dfs_cyc(to)) return true;
    }
  used[v][0] = 2;
  return false;
}
void dfs_calc(int v, int t) {
  used[v][t] = 1;
  for (auto to : g[v])
    if (!used[to][t ^ 1]) {
      pr[to][t ^ 1] = v;
      dfs_calc(to, t ^ 1);
    }
}
void solve() {
  bool draw = dfs_cyc(s);
  for (ll v = 0; v < (ll)n; ++v) used[v][0] = used[v][1] = 0;
  dfs_calc(s, 0);
  for (ll i = 0; i < (ll)n; ++i)
    if (g[i].empty() && used[i][1]) {
      vector<int> ans;
      for (int v = i, t = 1; v != s || t == 1; v = pr[v][t], t ^= 1)
        ans.push_back(v);
      ans.push_back(s);
      reverse(ans.begin(), ans.end());
      cout << "Win\n";
      for (auto i : ans) cout << i + 1 << ' ';
      cout << '\n';
      return;
    }
  if (draw)
    cout << "Draw\n";
  else
    cout << "Lose\n";
}
int main() {
  while (read()) solve();
  return 0;
}
