#include <bits/stdc++.h>
using namespace std;
template <typename T>
bool chmax(T& a, const T& b) {
  return a < b ? (a = b, true) : false;
}
template <typename T>
bool chmin(T& a, const T& b) {
  return b < a ? (a = b, true) : false;
}
int N, M, K;
vector<int> A[2];
int deg[2][7000];
int memo[2][7000];
int main() {
  scanf("%d%d", &K, &N);
  A[0].assign(N, 0);
  for (int i = (int)(0); i < (int)(N); i++) {
    scanf("%d", &A[0][i]);
  }
  scanf("%d", &M);
  A[1].assign(M, 0);
  for (int i = (int)(0); i < (int)(M); i++) {
    scanf("%d", &A[1][i]);
  }
  memset(memo, -1, sizeof(memo));
  for (int i = (int)(0); i < (int)(2); i++)
    for (int j = (int)(0); j < (int)(K); j++) deg[i][j] = A[i].size();
  queue<pair<int, int> > qWin, qLose;
  qLose.push(make_pair(0, 0));
  qLose.push(make_pair(1, 0));
  while (qWin.empty() == false || qLose.empty() == false) {
    if (qWin.empty() == false) {
      auto f = qWin.front();
      qWin.pop();
      memo[f.first][f.second] = 1;
      for (const auto& it : A[!f.first]) {
        int nxt = ((f.second - it) % K + K) % K;
        if (memo[!f.first][nxt] != -1) continue;
        if (--deg[!f.first][nxt] == 0) {
          qLose.push(make_pair(!f.first, nxt));
        }
      }
    }
    if (qLose.empty() == false) {
      auto f = qLose.front();
      qLose.pop();
      memo[f.first][f.second] = 0;
      for (const auto& it : A[!f.first]) {
        int nxt = ((f.second - it) % K + K) % K;
        if (memo[!f.first][nxt] != -1) continue;
        qWin.push(make_pair(!f.first, nxt));
      }
    }
  }
  for (int i = (int)(0); i < (int)(2); i++)
    for (int j = (int)(1); j < (int)(K); j++) {
      if (memo[i][j] == 1) {
        printf("Win");
      } else if (memo[i][j] == 0) {
        printf("Lose");
      } else {
        printf("Loop");
      }
      printf("%s", j == K - 1 ? "\n" : " ");
    }
  return 0;
}
