#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const int maxn = 7000 + 50;
int dp[maxn][2], cur, n, cnt[maxn][2], hascheck[maxn][2], inq[maxn][2];
queue<pair<int, int> > que[2];
vector<int> s[2];
int main(int argc, char* argv[]) {
  memset(dp, -1, sizeof(dp));
  n = read();
  int k1 = read();
  for (int i = 0; i < k1; ++i) {
    int x = read();
    s[0].emplace_back(x);
  }
  int k2 = read();
  for (int i = 0; i < k2; ++i) {
    int x = read();
    s[1].emplace_back(x);
  }
  for (int i = 0; i < n; ++i) cnt[i][0] = k1, cnt[i][1] = k2;
  que[cur].push(make_pair(0, 0));
  que[cur].push(make_pair(0, 1));
  inq[0][0] = inq[0][1] = 1;
  while (!que[cur].empty()) {
    int pre = cur;
    cur ^= 1;
    while (!que[cur].empty()) que[cur].pop();
    while (!que[pre].empty()) {
      pair<int, int> st = que[pre].front();
      que[pre].pop();
      int x = st.first, y = st.second;
      for (auto it : s[y ^ 1]) {
        int newx = (x - it + n) % n;
        if (newx == 0) continue;
        dp[newx][y ^ 1] = 1;
        if (hascheck[newx][y ^ 1]) continue;
        hascheck[newx][y ^ 1] = 1;
        for (auto it : s[y]) {
          int f = (newx - it + n) % n;
          --cnt[f][y];
          if (!cnt[f][y] && f) {
            dp[f][y] = 0;
            que[cur].push(make_pair(f, y));
          }
        }
      }
    }
  }
  for (int i = 1; i < n; ++i)
    if (dp[i][0] == 1)
      printf("Win ");
    else if (dp[i][0] == 0)
      printf("Lose ");
    else
      printf("Loop ");
  puts("");
  for (int i = 1; i < n; ++i)
    if (dp[i][1] == 1)
      printf("Win ");
    else if (dp[i][1] == 0)
      printf("Lose ");
    else
      printf("Loop ");
  puts("");
  return 0;
}
