#include <bits/stdc++.h>
using namespace std;
const int INFL = (int)1e9;
const long long int INFLL = (long long int)1e18;
const double INFD = numeric_limits<double>::infinity();
const double PI = 3.14159265358979323846;
bool nearlyeq(double x, double y) { return abs(x - y) < 1e-9; }
bool inrange(int x, int t) { return x >= 0 && x < t; }
long long int rndf(double x) {
  return (long long int)(x + (x >= 0 ? 0.5 : -0.5));
}
long long int floorsqrt(long long int x) {
  long long int m = (long long int)sqrt((double)x);
  return m + (m * m <= x ? 0 : -1);
}
long long int ceilsqrt(long long int x) {
  long long int m = (long long int)sqrt((double)x);
  return m + (x <= m * m ? 0 : 1);
}
long long int rnddiv(long long int a, long long int b) {
  return (a / b + (a % b * 2 >= b ? 1 : 0));
}
long long int ceildiv(long long int a, long long int b) {
  return (a / b + (a % b == 0 ? 0 : 1));
}
long long int gcd(long long int m, long long int n) {
  if (n == 0)
    return m;
  else
    return gcd(n, m % n);
}
long long int lcm(long long int m, long long int n) {
  return m * n / gcd(m, n);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  ;
  int n;
  cin >> n;
  vector<int> m(2);
  vector<vector<int>> a(2);
  for (int i = 0; i < (int)(2); i++) {
    cin >> m[i];
    a[i] = vector<int>(m[i]);
    for (int j = 0; j < (int)(m[i]); j++) {
      cin >> a[i][j];
    }
  }
  vector<vector<int>> dp(2, vector<int>(n, -1));
  vector<vector<int>> flag(2, vector<int>(n));
  for (int i = 0; i < (int)(2); i++) {
    for (int j = 0; j < (int)(n); j++) {
      flag[i][j] = m[i];
    }
  }
  dp[0][0] = 0;
  dp[1][0] = 0;
  flag[0][0] = 0;
  flag[1][0] = 0;
  stack<pair<int, int>> stk;
  stk.push({0, 0});
  stk.push({1, 0});
  while (stk.size()) {
    int p = stk.top().first;
    int q = stk.top().second;
    stk.pop();
    int xp = p ^ 1;
    for (int i = 0; i < (int)(m[xp]); i++) {
      int xq = q - a[xp][i];
      if (xq < 0) xq += n;
      if (flag[xp][xq] > 0) {
        if (dp[p][q] == 0) {
          dp[xp][xq] = 1;
          flag[xp][xq] = 0;
          stk.push({xp, xq});
        } else if (dp[p][q] == 1) {
          flag[xp][xq]--;
          if (flag[xp][xq] == 0) {
            dp[xp][xq] = 0;
            stk.push({xp, xq});
          }
        }
      }
    }
  }
  vector<vector<string>> ans(2, vector<string>(n - 1));
  for (int i = 0; i < (int)(2); i++) {
    for (int j = 0; j < (int)(n - 1); j++) {
      if (dp[i][j + 1] == -1)
        ans[i][j] = "Loop";
      else if (dp[i][j + 1] == 0)
        ans[i][j] = "Lose";
      else
        ans[i][j] = "Win";
    }
  }
  for (int i = 0; i < (int)(2); i++) {
    for (int extra_i = 0; extra_i < (int)(ans[i].size()); extra_i++) {
      cout << ans[i][extra_i] << " ";
    }
    cout << endl;
    ;
  }
}
