#include <bits/stdc++.h>
inline int getInt() {
  int s;
  scanf("%d", &s);
  return s;
}
using namespace std;
int win[2][7000];
int lose[2][7000];
int main() {
  const int n = getInt();
  vector<vector<int> > v(2);
  for (int i = 0; i < (int)(2); i++) {
    const int k = getInt();
    v[i] = vector<int>(k);
    for (int j = 0; j < (int)(k); j++) v[i][j] = getInt();
  }
  queue<pair<int, int> > winQ;
  queue<pair<int, int> > loseQ;
  const auto addWin = [&](int p, int pos) {
    if (pos == 0) return;
    if (win[p][pos] == 0) {
      win[p][pos] = 1;
      winQ.push(make_pair(p, pos));
    }
  };
  const auto addLose = [&](int p, int pos) {
    if (pos == 0) return;
    if (++lose[p][pos] == (int)v[p].size()) {
      loseQ.push(make_pair(p, pos));
    }
  };
  for (int i = 0; i < (int)(2); i++) {
    for (int j = 0; j < (int)(v[i].size()); j++) {
      addWin(i, n - v[i][j]);
    }
  }
  while (winQ.size()) {
    while (winQ.size()) {
      const auto d = winQ.front();
      winQ.pop();
      const int p = d.first;
      const int pos = d.second;
      for (int t : v[!p]) addLose(!p, (pos - t + n) % n);
    }
    while (loseQ.size()) {
      const auto d = loseQ.front();
      loseQ.pop();
      const int p = d.first;
      const int pos = d.second;
      for (int t : v[!p]) addWin(!p, (pos - t + n) % n);
    }
  }
  for (int i = 0; i < (int)(2); i++) {
    for (int j = 0; j < (int)(n - 1); j++) {
      if (win[i][j + 1])
        printf("Win");
      else if (lose[i][j + 1] == (int)v[i].size())
        printf("Lose");
      else
        printf("Loop");
      if (j == n - 2)
        puts("");
      else
        printf(" ");
    }
  }
  return 0;
}
