#include <bits/stdc++.h>
using namespace std;
inline bool EQ(double a, double b) { return fabs(a - b) < 1e-9; }
const int INF = (((1 << 30) - 1) << 1) + 1;
const int nINF = 1 << 31;
int n, m, s;
vector<bool> cycPart, vis, vis0, good;
vector<vector<int>> g, tlg;
vector<int> ans;
int getTlgIdx(int v, int par) { return v + n * par; }
int getOrig(int v) { return v <= n ? v : v - n; }
bool dfs(int src) {
  if (good[src]) {
    ans.push_back(getOrig(src));
    return true;
  }
  vis0[src] = 1;
  for (int v : tlg[src]) {
    if (!vis0[v] && dfs(v)) {
      ans.push_back(getOrig(src));
      return true;
    }
  }
  return false;
}
bool cycDfs(int src) {
  if (cycPart[src]) return true;
  vis[src] = 1;
  for (int v : g[src]) {
    if (!vis[v] && cycDfs(v)) return true;
  }
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  vector<vector<int>> rg(n + 1);
  g.resize(n + 1), tlg.resize(1 + 2 * n);
  vector<int> deg(n + 1, 0);
  vis.resize(1 + n, 0);
  vis0.resize(1 + n + n, 0);
  good.resize(1 + n + n, 0);
  queue<int> next;
  for (int i = (1); i <= (n); i++) {
    int c;
    cin >> c;
    deg[i] = c;
    if (c == 0) {
      next.push(i);
      good[getTlgIdx(i, 1)] = 1;
    }
    for (int j = 0; j < (c); j++) {
      int e;
      cin >> e;
      g[i].push_back(e);
      rg[e].push_back(i);
      tlg[getTlgIdx(i, 0)].push_back(getTlgIdx(e, 1));
      tlg[getTlgIdx(i, 1)].push_back(getTlgIdx(e, 0));
    }
  }
  cin >> s;
  if (dfs(getTlgIdx(s, 0))) {
    cout << "Win" << endl;
    reverse(ans.begin(), ans.end());
    for (int v : ans) cout << v << ' ';
    cout << endl;
    exit(0);
  }
  cycPart.resize(n + 1, 1);
  while (!next.empty()) {
    int cur = next.front();
    next.pop();
    cycPart[cur] = false;
    for (int v : rg[cur]) {
      --deg[v];
      if (deg[v] == 0) next.push(v);
    }
  }
  cout << (cycDfs(s) ? "Draw" : "Lose") << endl;
  return 0;
}
