#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cassert>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <bitset>
#include <functional>
#include <numeric>
using namespace std;

#define repl(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define rep(i,n) repl(i,0,n)
#define mp(a,b) make_pair((a),(b))
#define pb(a) push_back((a))
#define all(x) (x).begin(),(x).end()
#define dbg(x) cout<<#x"="<<((x))<<endl
#define fi first
#define se second

#define INF 2147483600
#define long long long

int field[8][8][8];
int x[7*7*8], y[7*7*8];

int check(int n, int m, int t){
  for(int dx=-1; dx<=1; dx++){
    for(int dy=-1; dy<=1; dy++){
      for(int dh=-1; dh<=1; dh++){
        if(dx==0 && dy==0 && dh==0) continue;
        // ????????????????????¢???????????§??¨??¨?????????
        // xx yy hh ????????£?¶???????????????°OK
        rep(xx,n) rep(yy,n) rep(hh,n) if(field[xx][yy][hh]==t){
          bool ok = true;
          repl(i,1,m){
            int nx = xx+dx*i, ny=yy+dy*i, nh =hh+dh*i;
            if(nx<0 || ny<0 || nh<0 || nx>=n || ny>=n || nh>=n || field[nx][ny][nh]!=t) {ok=false; break;}
          }
          if(ok) return true;
        }
      }
    }
  }
  return false;
}

int main(){
  int n,m,q;
  while(cin>>n>>m>>q, n){
    fill(field[0][0], field[7][8], -1);

    rep(i,q) scanf("%d %d", x+i, y+i);
    rep(i,q) x[i]--, y[i]--;

    rep(i,q){
      int h=0;
      while(field[x[i]][y[i]][h]!=-1) h++;
      field[x[i]][y[i]][h] = i%2; //cout<<x[i]<<","<<y[i]<<","<<h<<":"<<i%2<<endl;

      if(i%2==0 && check(n,m,0)){ cout << "Black " << i+1 << endl; break; }
      if(i%2==1 && check(n,m,1)){ cout << "White " << i+1 << endl; break; }
      if(i==q-1) cout << "Draw" << endl;
    }
  }
  return 0;
}