#include <bits/stdc++.h>
using namespace std;
int testsNumber = 1;
const int nmax = 2 * 1e5 + 5;
vector<int> gf[nmax];
int n, m;
vector<int> gt[nmax];
int viz[nmax][3];
int t[nmax][3];
int s;
int ciclu[nmax];
int ciclu2[nmax];
void reset() {}
void writeDrum(int node, int cost) {
  if (node == 0) {
    return;
  }
  writeDrum(t[node][cost], cost ^ 1);
  cout << node << " ";
}
void dfs(int node) {
  ciclu[node] = 1;
  ciclu2[node] = 1;
  for (int i = 0; i < gf[node].size(); ++i) {
    int vc = gf[node][i];
    if (ciclu[vc] == 0) {
      dfs(vc);
    } else if (ciclu2[vc] == 1) {
      cout << "Draw\n";
      exit(0);
    }
  }
  ciclu2[node] = 0;
}
void solve() {
  queue<pair<int, int> > q;
  q.push(make_pair(s, 1));
  viz[s][1] = 1;
  while (!q.empty()) {
    pair<int, int> curNode = q.front();
    int currNode = curNode.first;
    int currCost = curNode.second;
    q.pop();
    if (gf[currNode].size() == 0 && currCost % 2 == 0) {
      cout << "Win\n";
      writeDrum(currNode, currCost);
      return;
    }
    for (int j = 0; j < gf[currNode].size(); ++j) {
      int vc = gf[currNode][j];
      int newCost = currCost ^ 1;
      if (viz[vc][newCost] == 0) {
        t[vc][newCost] = currNode;
        q.push(make_pair(vc, newCost));
        viz[vc][newCost] = 1;
      }
    }
  }
  dfs(s);
  cout << "Lose"
       << "\n";
}
int main() {
  ios::sync_with_stdio(false);
  for (int currTest = 1; currTest <= testsNumber; ++currTest) {
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
      int ci;
      cin >> ci;
      for (int j = 1; j <= ci; ++j) {
        int y;
        cin >> y;
        gf[i].push_back(y);
      }
    }
    cin >> s;
    reset();
    solve();
  }
  return 0;
}
