7 7 7
1
2
3
4
5
6
7
 4 2 8
1
3
4
2
3
4
1
2
 9 4 9
1
2
3
4
5
6
7
8
9
 7 5 7
1
2
3
4
5
6
7
 15 10 15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 4 0 4
1
2
3
4
 12 2 12
1
2
3
4
5
6
7
8
9
10
11
12
 10 2 10
1
2
3
4
5
6
7
8
9
10
 7 4 7
1
2
3
4
5
6
7
 7 3 7
1
2
3
4
5
6
7

XXXXXXX
 ..XX.X.X
 ...X.X.XX
 .X.XXXX
 .X.X.X.X.XXXXXX
 ....
 .........X.X
 .......X.X
 .X.X.XX
 ...X.XX

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <cctype>
#include <vector>
#include <map>
#include <set>
#include <algorithm>

using namespace std;

__int64 n, k;

int p;

__int64 a[1000];

int main()
{
	scanf("%I64d %I64d %d", &n, &k, &p);
	
	if (k == 0)
	{
		for(int i = 0; i < p; i++) putchar('.');
		puts("");
		return 0;
	}
	
	if (k == n)
	{
		for(int i = 0; i < p; i++) putchar('X');
		puts("");
		return 0;
	}
	
	for(int i = 0; i < p; i++) { scanf("%I64d", &a[i]); a[i]--;}
	
	
	__int64 nk = n - k;
	
	if (k >= nk)
	{
		// .X.X.X (nk times) + XXX (k - nk times)
		for(int i = 0; i < p; i++)
		{
			if (a[i] < 2 * nk)
			{
				if (a[i] % 2 == 1) putchar('X'); else putchar('.');
			}
			else putchar('X');
		}
		puts("");
		return 0;
	}
	
	// special case
	
	if ((nk - (k - 1)) % 2 == 0 && k > 1)
	{
		// ...XX + .X.X.X (k - 2 times)
		//
		// instead of
		//
		// ..X + .X.X.X.X (k - 1 times)
		
		for(int i = 0; i < p; i++)
		{
			if (a[i] < nk - (k - 1) + 3)
			{
				if (a[i] < nk - (k - 1) + 1) putchar('.'); else putchar('X');
			}
			else
			{
				a[i] -= nk - (k - 1) + 3;
				if (a[i] % 2 == 1) putchar('X'); else putchar('.');
			}
		}
		puts("");		
		return 0;
	}

	//   .....X (1 time) + .X.X.X (k - 1 times)
	//   nk - (k - 1) dots
	
	for(int i = 0; i < p; i++)
	{
		if (a[i] < nk - (k - 1) + 1)
		{
			if (a[i] < nk - (k - 1)) putchar('.'); else putchar('X');
		}
		else
		{
			a[i] -= nk - (k - 1) + 1;
			if (a[i] % 2 == 1) putchar('X'); else putchar('.');
		}
	}
	puts("");
		
	return 0;
}
