#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 200010, mod = 1000000007;
int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
	return s*w;
}
struct Seg{
	int tot,s[maxn*100],v[maxn*100],rt,ls[maxn*100],rs[maxn*100];
	void psp(int k) {s[k]=s[ls[k]]+s[rs[k]],v[k]=v[ls[k]]+v[rs[k]];}
	void ins(int&k,int l,int r,int p,int VL,int VL2)
	{
		if(!k) k=++tot;
		if(l==r) return s[k]+=VL,v[k]+=VL2,void();int mid=l+r>>1;
		p>mid?ins(rs[k],mid+1,r,p,VL,VL2):ins(ls[k],l,mid,p,VL,VL2),psp(k);
	}
	int asks(int k,int l,int r,int L,int R)
	{
		if(l>R||L>r||!k) return 0;
		if(L<=l&&r<=R) return s[k];int mid=l+r>>1;
		return asks(ls[k],l,mid,L,R)+asks(rs[k],mid+1,r,L,R);
	}
	int askv(int k,int l,int r,int L,int R)
	{
		if(l>R||L>r||!k) return 0;
		if(L<=l&&r<=R) return v[k];int mid=l+r>>1;
		return askv(ls[k],l,mid,L,R)+askv(rs[k],mid+1,r,L,R);
	}
}s1,s2;
int ans,n,m,Q,a[maxn],b[maxn];
signed main()
{
	n=read(),m=read(),Q=read();
	s1.ins(s1.rt,0,1e8,0,0,n);
	s2.ins(s2.rt,0,1e8,0,0,m);
	for(int i=1,x,y;i<=Q;cout<<ans<<'\n',i++)
		if(read()==1)
		{
			x=read();
			ans-=s2.asks(s2.rt,0,1e8,a[x]+1,1e8)+a[x]*s2.askv(s2.rt,0,1e8,0,a[x]);
			s1.ins(s1.rt,0,1e8,a[x],-a[x],-1);
			a[x]=read();
			s1.ins(s1.rt,0,1e8,a[x],a[x],1);
			ans+=s2.asks(s2.rt,0,1e8,a[x]+1,1e8)+a[x]*s2.askv(s2.rt,0,1e8,0,a[x]);
		}
		else
		{
			x=read();
			ans-=s1.asks(s1.rt,0,1e8,b[x]+1,1e8)+b[x]*s1.askv(s1.rt,0,1e8,0,b[x]);
			s2.ins(s2.rt,0,1e8,b[x],-b[x],-1);
			b[x]=read();
			s2.ins(s2.rt,0,1e8,b[x],b[x],1);
			ans+=s1.asks(s1.rt,0,1e8,b[x]+1,1e8)+b[x]*s1.askv(s1.rt,0,1e8,0,b[x]);
		}
	return 0;
}
#include <bits/stdc++.h>

using namespace std;
#define int long long int
#define watch(x) cout << (#x) << " is " << (x) << endl
#define all(x) x.begin(), x.end()
#define MOD 1000000007
#define inf 1e17
vector<vector<int>> grid;
int n, m;
int dp[2005][2005];
int helper(int r, int c){
  if(r == n-1 && c == m-1)
    return 0;
  if(dp[r][c] != -1)
    return dp[r][c];
  int op1 = -inf, op2 = -inf;
  if(r+1 < n)
   op1 = grid[r+1][c] - helper(r+1, c);
  if(c+1 < m)
    op2 = grid[r][c+1] - helper(r, c+1);
  return dp[r][c] = max(op1, op2);
}
void solve(int T) {
  cin >> n >> m;
  grid.assign(n, vector<int>(m, 0));
  for(int i = 0 ; i < n ; i++){
    string s;
    cin >> s;
    for(int j = 0 ; j < m ; j++){
      grid[i][j] = (s[j]=='+'?1:-1);
    }

  }
  memset(dp, -1, sizeof dp);
  int ans = helper(0, 0);
  if(ans > 0){
    cout << "Takahashi" <<endl;
  }else if(ans < 0){
    cout <<"Aoki"<<endl;
  }else{
    cout <<"Draw"<<endl;
  }
}

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

#ifndef ONLINE_JUDGE
    freopen("inputf.txt", "r", stdin);
    freopen("outputf.txt", "w", stdout);
#endif

    int T = 1;
    //cin >> T;
    for (int t = 1; t <= T; t++) {
        solve(t);
    }

    cerr << "time taken : " << (float) clock() / CLOCKS_PER_SEC << " secs" << endl;
    return 0;
}
