#include <bits/stdc++.h>
using namespace std;
bool solo(string s, char c) {
  bool hayc = false;
  for (int i = 0; i < int(s.size()); i++) {
    if (s[i] != c and s[i] != '-') return false;
    if (s[i] == c) hayc = true;
  }
  return hayc;
}
bool sinpunto(string s) {
  for (int i = 0; i < int(s.size()); i++)
    if (s[i] == '-') return false;
  return true;
}
bool vacio(string s) {
  for (int i = 0; i < int(s.size()); i++)
    if (s[i] != '-') return false;
  return true;
}
int distancia(string s) {
  int index = 0;
  while (s[index] == '-') index++;
  index++;
  int nextindex = index;
  while (s[nextindex] == '-') nextindex++;
  return nextindex - index;
}
bool queden(vector<int> &v) {
  for (int i = 0; i < int(v.size()); i++)
    if (v[i] != 0) return true;
  return false;
}
bool seguent(vector<int> &v, int k) {
  int suma = 0;
  for (int i = 0; i < int(v.size()); i++) {
    suma += (v[i] % 2);
    v[i] = v[i] / 2;
  }
  if (suma % (k + 1) != 0) return false;
  return true;
}
int main() {
  int n, m, k;
  cin >> n >> m >> k;
  bool soloverde = false;
  bool solorojo = false;
  vector<int> dist;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    if (solo(s, 'G')) {
      if (not sinpunto(s)) soloverde = true;
    } else if (solo(s, 'R')) {
      if (not sinpunto(s)) solorojo = true;
    } else if (not vacio(s)) {
      dist.push_back(distancia(s));
    }
  }
  if (soloverde and solorojo) {
    cout << "Draw" << endl;
  } else if (soloverde) {
    cout << "First" << endl;
  } else if (solorojo) {
    cout << "Second" << endl;
  } else {
    bool segon = true;
    while (segon and queden(dist)) segon = seguent(dist, k);
    if (segon)
      cout << "Second" << endl;
    else
      cout << "First" << endl;
  }
}
