#include <bits/stdc++.h>
using namespace std;
namespace {
const int MAX = 100002;
vector<int> adj[MAX];
int pred[MAX][2];
bool vis[MAX], on_stack[MAX];
void DFS(int at) {
  if (on_stack[at]) {
    throw "vera";
  }
  if (vis[at]) return;
  vis[at] = on_stack[at] = true;
  for (auto &to : adj[at]) DFS(to);
  on_stack[at] = false;
}
void Solve(int) {
  int v, e;
  cin >> v >> e;
  for (int i = 1, __i = v + 1; i < __i; ++i) {
    int deg;
    cin >> deg;
    adj[i].resize(deg);
    for (auto &to : adj[i]) cin >> to;
  }
  int src;
  cin >> src;
  memset(pred, 0, sizeof(pred));
  queue<pair<int, int>> que;
  que.emplace(src, 0);
  pred[src][0] = -1;
  while (not que.empty()) {
    int at, par;
    tie(at, par) = que.front();
    que.pop();
    for (auto &to : adj[at]) {
      if (!pred[to][par ^ 1]) {
        pred[to][par ^ 1] = at;
        que.emplace(to, par ^ 1);
      }
    }
  }
  for (int ed = 1, __ed = v + 1; ed < __ed; ++ed)
    if (adj[ed].empty() and pred[ed][1]) {
      vector<int> path;
      int par = 1;
      for (int at = ed;; at = pred[at][par], par ^= 1) {
        path.push_back(at);
        if (at == src and par == 0) break;
      }
      reverse(path.begin(), path.end());
      cout << "Win\n";
      for (auto &p : path) cout << p << ' ';
      cout << endl;
      return;
    }
  try {
    memset(vis, false, sizeof(vis));
    memset(on_stack, false, sizeof(on_stack));
    DFS(src);
  } catch (...) {
    cout << "Draw\n";
    return;
  }
  cout << "Lose\n";
}
void Init() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
}
}  // namespace
int main() {
  Init();
  int tests = 1;
  for (int test = 1, __test = tests + 1; test < __test; ++test) Solve(test);
  return 0;
}
