#include <bits/stdc++.h>
using namespace std;
template <class T1, class T2>
inline istream& operator>>(istream& fin, pair<T1, T2>& pr) {
  fin >> pr.first >> pr.second;
  return fin;
}
template <class T0, class T1, class T2>
inline istream& operator>>(istream& fin, tuple<T0, T1, T2>& t) {
  fin >> get<0>(t) >> get<1>(t) >> get<2>(t);
  return fin;
}
template <class T>
inline istream& operator>>(istream& fin, vector<T>& a) {
  for (auto& u : a) fin >> u;
  return fin;
}
template <class T, size_t n>
inline istream& operator>>(istream& fin, array<T, n>& a) {
  for (auto& u : a) fin >> u;
  return fin;
}
template <class FwdIter>
inline auto dump(FwdIter first, FwdIter last, const char* dlm = " ") -> void {
  copy(first, last,
       ostream_iterator<typename iterator_traits<FwdIter>::value_type>(cout,
                                                                       dlm));
}
template <typename T>
vector<T>& operator--(vector<T>& a) {
  for (auto& i : a) --i;
  return a;
}
vector<pair<size_t, size_t>> solve(const size_t n, const vector<size_t>& a,
                                   const vector<size_t>& b) {
  vector<pair<size_t, size_t>> out(n, {(size_t)-1, (size_t)-1});
  out[0].first = 0;
  out[0].second = 1;
  vector<size_t> amov(n, a.size());
  vector<size_t> bmov(n, b.size());
  queue<pair<size_t, bool>> q;
  q.push({0, true});
  q.push({0, false});
  const size_t nil = (size_t)-1;
  for (; !q.empty(); q.pop()) {
    const auto pr = q.front();
    const auto j = pr.first;
    if (pr.second) {
      if (out[j].first == 1) {
        for (const auto s : b) {
          const auto i = (j + n - s) % n;
          --bmov[i];
          if ((!bmov[i]) && (out[i].second == nil)) {
            out[i].second = 1;
            q.emplace(i, false);
          }
        }
      } else {
        for (const auto s : b) {
          const auto i = (j + n - s) % n;
          if (out[i].second == nil) {
            out[i].second = 0;
            q.emplace(i, false);
          }
        }
      }
    } else {
      if (out[j].second == 1) {
        for (const auto s : a) {
          const auto i = (j + n - s) % n;
          if (out[i].first == nil) {
            out[i].first = 1;
            q.emplace(i, true);
          }
        }
      } else {
        for (const auto s : a) {
          const auto i = (j + n - s) % n;
          --amov[i];
          if ((!amov[i]) && (out[i].first == nil)) {
            out[i].first = 0;
            q.emplace(i, true);
          }
        }
      }
    }
  }
  return out;
}
void a786() {
  size_t n;
  cin >> n;
  vector<size_t> a, b;
  {
    size_t k;
    cin >> k;
    a.resize(k);
    cin >> a;
  }
  {
    size_t k;
    cin >> k;
    b.resize(k);
    cin >> b;
  }
  sort(begin(a), end(a));
  a.erase(unique(begin(a), end(a)), end(a));
  b.erase(unique(begin(b), end(b)), end(b));
  {
    const auto out = solve(n, a, b);
    for (size_t i = 1; i < n; ++i) {
      const auto val = out[i].first;
      cout << (!val ? "Lose" : val == 1 ? "Win" : "Loop");
      if (i + 1 < n) cout << " ";
    }
    cout << '\n';
    for (size_t i = 1; i < n; ++i) {
      const auto val = out[i].second;
      cout << (!val ? "Win" : val == 1 ? "Lose" : "Loop");
      if (i + 1 < n) cout << " ";
    }
  }
}
int main(const int argc, char* argv[]) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  a786();
  return EXIT_SUCCESS;
}
