#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10, mod = 1e9 + 7;
const long long inf = 1e18;
map<int, vector<pair<int, int> > > mp[2];
map<int, int> gr[2];
vector<int> vv, sm;
void prep(vector<pair<int, int> > &vec, int n) {
  vv.clear();
  sm.clear();
  for (pair<int, int> p : vec) {
    vv.push_back(p.first);
    vv.push_back(p.second);
  }
  vv.push_back(0);
  vv.push_back(n);
  sort(vv.begin(), vv.end());
  vv.resize(unique(vv.begin(), vv.end()) - vv.begin());
  sm.resize(int((vv).size()), 0);
  for (pair<int, int> p : vec) {
    sm[lower_bound(vv.begin(), vv.end(), p.first) - vv.begin()]++;
    sm[lower_bound(vv.begin(), vv.end(), p.second) - vv.begin()]--;
  }
}
int calc(vector<pair<int, int> > &vec, int n) {
  prep(vec, n);
  int ans = 0, nw = sm[0];
  for (int i = 1; i < int((vv).size()); i++) {
    if (nw == 0) ans += vv[i] - vv[i - 1];
    nw += sm[i];
  }
  return ans;
}
int Do(vector<pair<int, int> > &vec, int n, int l) {
  prep(vec, n);
  int ans = 0, nw = sm[0];
  for (int i = 1; i < int((vv).size()); i++) {
    if (nw == 0) {
      if (ans + vv[i] - vv[i - 1] >= l) return vv[i - 1] + l - ans;
      ans += vv[i] - vv[i - 1];
    }
    nw += sm[i];
  }
  return -3;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n, m, k;
  cin >> n >> m >> k;
  for (int i = 0; i < k; i++) {
    int x1, x2, y1, y2;
    cin >> x1 >> y1 >> x2 >> y2;
    if (y1 > y2) swap(y1, y2);
    if (x1 > x2) swap(x1, x2);
    if (x1 == x2)
      mp[0][x1].push_back({y1, y2});
    else
      mp[1][y1].push_back({x1, x2});
  }
  int isnx = -1, isny = -1, Count = 1;
  for (auto &x : mp[0]) {
    if (x.first != Count) break;
    Count++;
  }
  isnx = Count;
  Count = 1;
  for (auto &x : mp[1]) {
    if (x.first != Count) break;
    Count++;
  }
  isny = Count;
  int ans = 0;
  if ((n ^ 1 ^ int((mp[0]).size())) & 1) {
    gr[0][isnx] = m;
    ans ^= m;
  }
  if ((m ^ 1 ^ int((mp[1]).size())) & 1) {
    gr[1][isny] = n;
    ans ^= n;
  }
  for (auto &x : mp[0]) {
    int num = calc(x.second, m);
    ans ^= num;
    gr[0][x.first] = num;
  }
  for (auto &x : mp[1]) {
    int num = calc(x.second, n);
    ans ^= num;
    gr[1][x.first] = num;
  }
  if (ans == 0) return cout << "SECOND\n", 0;
  cout << "FIRST\n";
  int id = 31 - __builtin_clz(ans);
  for (auto x : gr[0]) {
    if ((((x.second) >> (id)) & 1)) {
      int pos = Do(mp[0][x.first], m, x.second - (ans ^ x.second));
      return cout << x.first << " " << 0 << " " << x.first << " " << pos
                  << "\n",
             0;
    }
  }
  for (auto x : gr[1]) {
    if ((((x.second) >> (id)) & 1)) {
      int pos = Do(mp[1][x.first], n, x.second - (ans ^ x.second));
      return cout << 0 << " " << x.first << " " << pos << " " << x.first
                  << "\n",
             0;
    }
  }
  return 0;
}
