#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const double EPS = 1e-8;
const int mod = 1e9 + 7;
const int N = 1e6 + 10;
const long long INF = 1e18;
long long power(long long x, long long y) {
  long long t = 1;
  while (y > 0) {
    if (y % 2)
      y -= 1, t = t * x % mod;
    else
      y /= 2, x = x * x % mod;
  }
  return t;
}
int pos[2][8000], tot[2][8000];
vector<int> A[2];
int main() {
  int n;
  scanf("%d", &n);
  memset(pos, -1, sizeof(pos));
  int t;
  scanf("%d", &t);
  for (int j = 0; j < t; ++j) {
    int x;
    scanf("%d", &x);
    A[0].push_back(x);
  }
  scanf("%d", &t);
  for (int j = 0; j < t; ++j) {
    int x;
    scanf("%d", &x);
    A[1].push_back(x);
  }
  for (int i = 0; i < 2; ++i)
    for (int j = 0; j < n; ++j) tot[i][j] = A[i].size();
  queue<pair<int, int> > ps;
  pos[0][0] = 0;
  pos[1][0] = 0;
  ps.push(make_pair(0, 0));
  ps.push(make_pair(1, 0));
  while (!ps.empty()) {
    pair<int, int> cur = ps.front();
    ps.pop();
    int nx = cur.first ^ 1;
    if (pos[cur.first][cur.second] == 0) {
      for (int j = 0; j < A[nx].size(); ++j) {
        int z = cur.second - A[nx][j];
        if (z < 0) z += n;
        if (pos[nx][z] == -1) {
          pos[nx][z] = 1;
          ps.push(make_pair(nx, z));
        }
      }
    } else {
      for (int j = 0; j < A[nx].size(); ++j) {
        int z = cur.second - A[nx][j];
        if (z < 0) z += n;
        if (pos[nx][z] == -1) {
          tot[nx][z]--;
          if (tot[nx][z] == 0) {
            pos[nx][z] = 0;
            ps.push(make_pair(nx, z));
          }
        }
      }
    }
  }
  for (int i = 0; i < 2; ++i) {
    for (int j = 1; j < n; ++j) {
      if (pos[i][j] == -1)
        printf("Loop");
      else if (pos[i][j] == 0)
        printf("Lose");
      else
        printf("Win");
      printf("%c", (j + 1 == n) ? '\n' : ' ');
    }
  }
  return 0;
}
