#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
int n, m, k;
struct Node {
  int x, l, r;
  Node() {}
  Node(int _x, int _l, int _r) { x = _x, l = _l, r = _r; }
  bool operator<(const Node &p) const {
    if (x != p.x) return x < p.x;
    if (l != p.l) return l < p.l;
    return r < p.r;
  }
  void out() { printf("x = %d, l = %d, r = %d\n", x, l, r); }
};
vector<Node> X, Y;
void gao(vector<Node> &vec, int L, int &sg) {
  sort(vec.begin(), vec.end());
  for (int i = 0, j; i < ((int)(vec).size()); i = j) {
    j = i + 1;
    while (j < ((int)(vec).size()) && vec[j].x == vec[i].x) ++j;
    int cnt = 0, l = 0, r = 0;
    for (int k = (i); k < (j); ++k)
      if (vec[k].l <= r) {
        r = max(r, vec[k].r);
      } else {
        cnt += r - l;
        l = vec[k].l, r = vec[k].r;
      }
    cnt += r - l;
    sg ^= L ^ (L - cnt);
  }
}
Node move(vector<Node> &vec, int X, int L, int sg) {
  set<int> S;
  for (int i = 0, j; i < ((int)(vec).size()); i = j) {
    j = i + 1;
    while (j < ((int)(vec).size()) && vec[j].x == vec[i].x) ++j;
    int cnt = 0, l = 0, r = 0;
    for (int k = (i); k < (j); ++k)
      if (vec[k].l <= r) {
        r = max(r, vec[k].r);
      } else {
        cnt += r - l;
        l = vec[k].l, r = vec[k].r;
      }
    cnt += r - l, S.insert(vec[i].x);
    if ((sg ^ (L - cnt)) <= L - cnt) {
      sg ^= L - cnt;
      if (sg <= vec[i].l) return Node(vec[i].x, sg, L);
      sg -= vec[i].l, l = vec[i].l, r = vec[i].r;
      for (int k = (i); k < (j); ++k)
        if (vec[k].l <= r) {
          r = max(r, vec[k].r);
        } else {
          if (sg <= vec[k].l - r) return Node(vec[i].x, r + sg, L);
          sg -= vec[k].l - r;
          l = vec[k].l, r = vec[k].r;
        }
      return Node(vec[i].x, r + sg, L);
    }
  }
  for (int x = (1); x < (X); ++x)
    if (S.find(x) == S.end()) {
      if ((sg ^ L) <= L) return Node(x, sg ^ L, L);
      break;
    }
  return Node(-1, -1, -1);
}
int solve() {
  int sg = 0;
  if (!(n & 1)) sg ^= m;
  if (!(m & 1)) sg ^= n;
  gao(X, m, sg), gao(Y, n, sg);
  return sg;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = (0); i < (k); ++i) {
    int x1, y1, x2, y2;
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
    if (x1 == x2) {
      X.push_back(Node(x1, min(y1, y2), max(y1, y2)));
    } else {
      Y.push_back(Node(y1, min(x1, x2), max(x1, x2)));
    }
  }
  int sg = solve();
  if (sg) {
    puts("FIRST");
    Node ans = move(X, n, m, sg);
    if (~ans.x) {
      printf("%d %d %d %d", ans.x, ans.l, ans.x, ans.r);
    } else {
      ans = move(Y, m, n, sg);
      printf("%d %d %d %d", ans.l, ans.x, ans.r, ans.x);
    }
  } else {
    puts("SECOND");
  }
  return 0;
}
