#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
bool prime[100005];
void Sieve(long long int n) {
  memset(prime, true, sizeof(prime));
  for (long long int p = 2; p * p <= n; p++) {
    if (prime[p] == true) {
      for (long long int i = p * p; i <= n; i += p) prime[i] = false;
    }
  }
}
void solve() {
  long long int N;
  long long int n;
  cin >> n;
  long long int ans[3] = {0};
  for (long long int i = 0; i < 3; i++) {
    string s;
    cin >> s;
    N = s.length();
    map<char, long long int> m;
    for (auto j : s) m[j]++;
    long long int mx = 0;
    for (auto j : m) mx = max(mx, j.second);
    ans[i] = mx;
  }
  for (long long int i = 0; i < 3; i++) {
    if (ans[i] == N && n == 1)
      ans[i]--;
    else
      ans[i] = min(ans[i] + n, N);
  }
  if (((ans[0] == ans[1] || ans[0] == ans[2]) &&
       ans[0] == max({ans[0], ans[1], ans[2]})) ||
      ((ans[1] == ans[0] || ans[1] == ans[2]) &&
       ans[1] == max({ans[0], ans[1], ans[2]})) ||
      ((ans[2] == ans[1] || ans[0] == ans[2]) &&
       ans[2] == max({ans[0], ans[1], ans[2]}))) {
    cout << "Draw" << '\n';
    return;
  }
  if (ans[0] == max({ans[0], ans[1], ans[2]}))
    cout << "Kuro";
  else if (ans[1] == max({ans[0], ans[1], ans[2]}))
    cout << "Shiro";
  else if (ans[2] == max({ans[0], ans[1], ans[2]}))
    cout << "Katie";
  cout << '\n';
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long int t = 1;
  while (t--) {
    solve();
  }
}
