#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <algorithm>
#include <functional>
#include <cstring>
#include <string>
#include <sstream>
#include <bitset>
using namespace std;
#define INF	100000000
#define MOD 1000000007
#define pb push_back
#define mp make_pair
#define fi first
#define sec second
#define lb lower_bound
#define ub upper_bound
#define SS stringstream
#define rep(i,n) for(int i = 0; i < n; i++)
#define SORT(x) sort((x).begin(), (x).end())
#define clr(a,b) memset((a),(b),sizeof(a))
typedef long long int ll;
typedef pair<int, int> P;
typedef vector<int> Vi;
typedef vector<ll> Vll;
typedef vector<P> Vp;
typedef priority_queue<P, vector<P>, greater<P> > PQ;

int main(){
	int n, m, p;
	int ball[7][7][7];
	while(scanf("%d%d%d", &n, &m, &p), n||m||p){
		rep(i,7) rep(j,7) rep(k,7) ball[i][j][k] = 2;
		bool end = true;
		rep(i,p){
			int x, y;
			int color = i%2;
			scanf("%d%d", &x, &y);
			x--; y--;
			for(int j = 0;;j++){
				if(ball[x][y][j] == 2){
					ball[x][y][j] = color;
					break;
				}
			}
			bool ok = false;
			rep(j,n){
				rep(k,n){
					int cnt = 0;
					rep(l,n){
						if(ball[j][k][l] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(j,n){
				rep(k,n){
					int cnt = 0;
					rep(l,n){
						if(ball[k][l][j] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(j,n){
				rep(k,n){
					int cnt = 0;
					rep(l,n){
						if(ball[l][j][k] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(j,n){
				int cnt = 0;
				rep(k,n){
					if(ball[j][k][n-k-1] == color) cnt++;
					else cnt = 0;
					if(cnt >= m){
						ok = true;
						break;
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[j][l+k][n-l-1] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[j][l][n-l-1-k] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(j,n){
				int cnt = 0;
				rep(k,n){
					if(ball[j][k][k] == color) cnt++;
					else cnt = 0;
					if(cnt >= m){
						ok = true;
						break;
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[j][l+k][l] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[j][l][l+k] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(j,n){
				int cnt = 0;
				rep(k,n){
					if(ball[n-k-1][j][k] == color) cnt++;
					else cnt = 0;
					if(cnt >= m){
						ok = true;
						break;
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[n-l-1][j][l+k] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[n-l-1-k][j][l] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(j,n){
				int cnt = 0;
				rep(k,n){
					if(ball[k][j][k] == color) cnt++;
					else cnt = 0;
					if(cnt >= m){
						ok = true;
						break;
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[l][j][l+k] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[l+k][j][l] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(j,n){
				int cnt = 0;
				rep(k,n){
					if(ball[k][n-k-1][j] == color) cnt++;
					else cnt = 0;
					if(cnt >= m){
						ok = true;
						break;
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[l+k][n-l-1][j] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[l][n-l-1-k][j] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(j,n){
				int cnt = 0;
				rep(k,n){
					if(ball[k][k][j] == color) cnt++;
					else cnt = 0;
					if(cnt >= m){
						ok = true;
						break;
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[k+l][l][j] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
				rep(k,n){
					cnt = 0;
					for(int l = 0; l < n-k; l++){	
						if(ball[l][k+l][j] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(u,n){
				rep(v,n){
					int cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j+u][j+v][j] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
					cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j+u][j][j+v] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
					cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j][j+v][j+u] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(u,n){
				rep(v,n){
					int cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j+u][j+v][n-j-1] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
					cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j+u][j][n-j-1-v] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
					cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j][j+u][n-j-1-v] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(u,n){
				rep(v,n){
					int cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j+u][n-j-1-v][j] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
					cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j+u][n-j-1][j+v] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
					cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j][n-j-1-u][j+v] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			rep(u,n){
				rep(v,n){
					int cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j+u][n-j-1-v][n-j-1] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
					cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j+u][n-j-1][n-j-1-v] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
					cnt = 0;
					rep(j,n-max(u,v)){
						if(ball[j][n-j-1-u][n-j-1-v] == color) cnt++;
						else cnt = 0;
						if(cnt >= m){
							ok = true;
							break;
						}
					}
				}
			}
			if(ok){
				end = false;
				if(color){
					printf("White %d\n", i+1);
				} else{
					printf("Black %d\n", i+1);
				}
				for(int j = i+1; j < p; j++){
					scanf("%d%d", &x, &y);
				}
				break;
			}
		}
		if(end) printf("Draw\n");
	}
}

Measured memory_bytes: 1200