#include <bits/stdc++.h>
using namespace std;
const long long inf = LLONG_MAX;
struct specialEdge {
  int i, b;
  long long l, r;
  bool change;
  specialEdge(int I, int B, long long L, long long R, bool C) {
    i = I;
    b = B;
    l = L;
    r = R;
    change = C;
  }
  long long weight() { return (change ? l : r); }
};
vector<vector<pair<int, long long>>> graph;
vector<vector<specialEdge>> special;
vector<vector<long long>> d(2);
int n, m, k, s1, s2, f;
void dijkstra(vector<long long> &dist, int start) {
  priority_queue<pair<int, long long>, vector<pair<int, long long>>,
                 function<bool(pair<int, long long>, pair<int, long long>)>>
      pq([](pair<int, long long> e1, pair<int, long long> e2) {
        return (e1.second != e2.second ? e1.second > e2.second
                                       : e1.first > e2.first);
      });
  for (long long &d : dist) d = inf;
  dist[start] = 0;
  pq.emplace(start, 0);
  while (!pq.empty()) {
    int u = pq.top().first;
    long long d = pq.top().second;
    pq.pop();
    if (u == f) break;
    for (pair<int, long long> e : graph[u]) {
      int v = e.first;
      long long w = e.second;
      if (dist[v] > dist[u] + w) {
        dist[v] = dist[u] + w;
        pq.emplace(v, dist[v]);
      }
    }
    for (specialEdge e : special[u]) {
      int v = e.b;
      long long w = e.weight();
      if (dist[v] > dist[u] + w) {
        dist[v] = dist[u] + w;
        pq.emplace(v, dist[v]);
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> k >> s1 >> s2 >> f;
  --s1;
  --s2;
  --f;
  graph.resize(n);
  special.resize(n);
  for (int i = 0; i < m; ++i) {
    int a, b;
    long long C;
    cin >> a >> b >> C;
    --a;
    --b;
    graph[a].emplace_back(b, C);
  }
  for (int i = 0; i < k; ++i) {
    int a, b;
    long long l, r;
    cin >> a >> b >> l >> r;
    --a;
    --b;
    special[a].emplace_back(i, b, l, r, false);
  }
  vector<long long> d1(n), d2(n);
  dijkstra(d1, s1);
  dijkstra(d2, s2);
  for (int u = 0; u < n; ++u)
    for (specialEdge &e : special[u])
      if (d1[u] < d2[u]) e.change = true;
  bool change = true;
  while (change) {
    dijkstra(d1, s1);
    dijkstra(d2, s2);
    change = false;
    for (int u = 0; u < n; ++u)
      for (specialEdge &e : special[u])
        if (d1[u] < d2[u] && !e.change) {
          e.change = true;
          change = true;
        }
  }
  if (d1[f] < d2[f]) {
    cout << "WIN\n";
    vector<long long> output(k);
    for (int u = 0; u < n; ++u)
      for (specialEdge e : special[u]) output[e.i] = e.weight();
    for (long long out : output) cout << out << ' ';
    return 0;
  }
  for (int u = 0; u < n; ++u)
    for (specialEdge &e : special[u]) e.change = false;
  dijkstra(d1, s1);
  dijkstra(d2, s2);
  for (int u = 0; u < n; ++u)
    for (specialEdge &e : special[u])
      if (d1[u] <= d2[u]) e.change = true;
  change = true;
  while (change) {
    dijkstra(d1, s1);
    dijkstra(d2, s2);
    change = false;
    for (int u = 0; u < n; ++u)
      for (specialEdge &e : special[u])
        if (d1[u] <= d2[u] && !e.change) {
          e.change = true;
          change = true;
        }
  }
  if (d1[f] <= d2[f]) {
    cout << "DRAW\n";
    vector<long long> output(k);
    for (int u = 0; u < n; ++u)
      for (specialEdge e : special[u]) output[e.i] = e.weight();
    for (long long out : output) cout << out << ' ';
    return 0;
  }
  cout << "LOSE\n";
  return 0;
}
