#include <bits/stdc++.h>
using namespace std;
struct node {
  int pos, p;
  node(int a = 0, int b = 0) : pos(a), p(b) {}
};
int dp[15000][3];
int d[15000][3];
vector<int> v[3];
int n;
void solve() {
  for (int i = 0; i < n; i++) {
    d[i][0] = v[0].size();
    d[i][1] = v[1].size();
  }
  dp[0][0] = -1;
  dp[0][1] = 1;
  d[0][0] = d[0][1] = 0;
  queue<node> q;
  q.push(node(0, 0));
  q.push(node(0, 1));
  while (!q.empty()) {
    node p = q.front();
    q.pop();
    if ((p.p == 0 && dp[p.pos][p.p] == -1) ||
        (p.p == 1 && dp[p.pos][p.p] == 1)) {
      for (int i = 0; i < v[p.p ^ 1].size(); i++) {
        int k = (p.pos + v[p.p ^ 1][i]) % n;
        if (d[k][p.p ^ 1] == 0) continue;
        d[k][p.p ^ 1] = 0;
        dp[k][p.p ^ 1] = dp[p.pos][p.p];
        q.push(node(k, p.p ^ 1));
      }
    } else {
      for (int i = 0; i < v[p.p ^ 1].size(); i++) {
        int k = (p.pos + v[p.p ^ 1][i]) % n;
        if (d[k][p.p ^ 1] == 0) continue;
        d[k][p.p ^ 1]--;
        if (d[k][p.p ^ 1] != 0) continue;
        dp[k][p.p ^ 1] = dp[p.pos][p.p];
        q.push(node(k, p.p ^ 1));
      }
    }
  }
}
int main() {
  while (scanf("%d", &n) == 1) {
    v[0].clear();
    v[1].clear();
    memset(dp, 0, sizeof(dp));
    int m;
    scanf("%d", &m);
    for (int i = 0; i < m; i++) {
      int p;
      scanf("%d", &p);
      v[0].push_back(p);
    }
    scanf("%d", &m);
    for (int i = 0; i < m; i++) {
      int p;
      scanf("%d", &p);
      v[1].push_back(p);
    }
    solve();
    for (int i = n - 1; i > 0; i--) {
      if (i != n - 1) printf(" ");
      if (dp[i][0] == -1)
        printf("Lose");
      else if (dp[i][0] == 0)
        printf("Loop");
      else
        printf("Win");
    }
    printf("\n");
    for (int i = n - 1; i > 0; i--) {
      if (i != n - 1) printf(" ");
      if (dp[i][1] == 1)
        printf("Lose");
      else if (dp[i][1] == 0)
        printf("Loop");
      else
        printf("Win");
    }
    printf("\n");
  }
}
