#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>
#include <cfloat>
#include <ctime>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
#include <numeric>
#include <list>

using namespace std;

#ifdef _MSC_VER
#define __typeof__ decltype
template <class T> int __builtin_popcount(T n) { return n ? 1 + __builtin_popcount(n & (n - 1)) : 0; }
#endif

#define foreach(it, c) for (__typeof__((c).begin()) it=(c).begin(); it != (c).end(); ++it)
#define all(c) (c).begin(), (c).end()
#define rall(c) (c).rbegin(), (c).rend()
#define popcount __builtin_popcount
#define clear(arr, val) memset(arr, val, sizeof(arr))

#define rep(i, n) for (int i = 0; i < n; ++i)

template <class T> void max_swap(T& a, const T& b) { a = max(a, b); }
template <class T> void min_swap(T& a, const T& b) { a = min(a, b); }

typedef long long ll;
typedef pair<int, int> pint;

const double PI = acos(-1.0);
const int dx[] = { 0, 1, 0, -1 };
const int dy[] = { 1, 0, -1, 0 };


int dist(int x1, int y1, int x2, int y2)
{
	int x = x1 - x2;
	int y = y1 - y2;
	return x * x + y * y;
}
int main()
{
	int T;
	scanf("%d", &T);
	while (T--)
	{
		int N, X, Y, x[1024], y[1024];
		scanf("%d%d%d", &N, &X, &Y);
		for (int i = 0; i <= N; ++i)
			scanf("%d%d", x + i, y + i);


		vector<int> edge[1024];
		for (int i = 1; i <= N; ++i)
			if (dist(x[0], y[0], x[i], y[i]) <= 100)
				edge[0].push_back(i);

		for (int i = 1; i <= N; ++i)
			for (int j = i + 1; j <= N; ++j)
				if (dist(x[i], y[i], x[j], y[j]) <= 2500)
					edge[i].push_back(j), edge[j].push_back(i);

		int dis[1024];
		fill_n(dis, N + 1, -1);
		queue<int> q;
		q.push(0);
		dis[0] = 0;
		while (!q.empty())
		{
			int v = q.front(); q.pop();
			for (int i = 0; i < edge[v].size(); ++i)
			{
				int to = edge[v][i];
				if (dis[to] < 0)
				{
					q.push(to);
					dis[to] = dis[v] + 1;
				}
			}
		}
		int m = *max_element(dis, dis + (N + 1));
		if (m > 1 && X > Y)
			puts("You're always welcome!");
		else
			printf("%d\n", X * m);
	}
}
### Prompt

Generate a cpp solution to the following problem:

Natsume loves big cats. One day, Natsume was invited by the stray cats she was always close to to go to the mysterious bookstore where the cats were open. When I heard that the bookstore sells books with many pictures of cats, Natsume decided to follow her happily.

I didn't know Natsume, but the bookstore that was taken by the cats was a famous store with chain stores nationwide. The store has a solid manual for the clerk, and the behavior of the clerk is unified in every store. The following is an excerpt from the manual.

1. When a customer enters the store through a door within a 10-Euclidean distance from the clerk, he must say "Welcome Hello" in a loud voice for X seconds.
2. When the clerk who heard another clerk within the Euclidean distance of 50 saying "Welcome Hello", the clerk said "Welcome Hello" at the end of the utterance of "Welcome Hello" in a loud voice over X seconds. Must. However, a clerk who has completed uttering another "Welcome Hello" within the past Y seconds from the start of uttering this repeat must not repeat it.



Given the X, Y, customer location, and clerk placement, calculate how many seconds it will take for the store to be quiet after the customer enters. If the repeat does not stop, print "You're always welcome!".

Notes on Submission

Multiple datasets are given in the above format. The first line of input data gives the number of datasets. Create a program that outputs the output for each data set in order in the above format.



Input

The number N of the clerk and the X and Y written in the manual are given on the first line of the input, separated by one space character. The second line is the position where Natsume enters the store, and the following N lines are the coordinates representing the positions of N clerk. Each position is given by separating the x and y coordinates with a single space character, and each number is given as an integer between 0 and 1000. Also, 1 <= N <= 1000, 1 <= X, Y <= 100 is satisfied.

Output

If the repeat does not stop, output the time from when the customer enters the store until it becomes quiet, and if it does not stop, output "You're always welcome!" On one line.

Example

Input

4
3 3 5
0 0
10 0
40 40
40 90
4 5 10
100 100
50 100
50 150
100 50
100 150
4 60 10
100 100
90 100
110 100
100 90
100 110
4 60 10
100 100
80 100
110 100
100 80
100 110


Output

9
0
60
You're always welcome!

### Response

```cpp
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>
#include <cfloat>
#include <ctime>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
#include <numeric>
#include <list>

using namespace std;

#ifdef _MSC_VER
#define __typeof__ decltype
template <class T> int __builtin_popcount(T n) { return n ? 1 + __builtin_popcount(n & (n - 1)) : 0; }
#endif

#define foreach(it, c) for (__typeof__((c).begin()) it=(c).begin(); it != (c).end(); ++it)
#define all(c) (c).begin(), (c).end()
#define rall(c) (c).rbegin(), (c).rend()
#define popcount __builtin_popcount
#define clear(arr, val) memset(arr, val, sizeof(arr))

#define rep(i, n) for (int i = 0; i < n; ++i)

template <class T> void max_swap(T& a, const T& b) { a = max(a, b); }
template <class T> void min_swap(T& a, const T& b) { a = min(a, b); }

typedef long long ll;
typedef pair<int, int> pint;

const double PI = acos(-1.0);
const int dx[] = { 0, 1, 0, -1 };
const int dy[] = { 1, 0, -1, 0 };


int dist(int x1, int y1, int x2, int y2)
{
	int x = x1 - x2;
	int y = y1 - y2;
	return x * x + y * y;
}
int main()
{
	int T;
	scanf("%d", &T);
	while (T--)
	{
		int N, X, Y, x[1024], y[1024];
		scanf("%d%d%d", &N, &X, &Y);
		for (int i = 0; i <= N; ++i)
			scanf("%d%d", x + i, y + i);


		vector<int> edge[1024];
		for (int i = 1; i <= N; ++i)
			if (dist(x[0], y[0], x[i], y[i]) <= 100)
				edge[0].push_back(i);

		for (int i = 1; i <= N; ++i)
			for (int j = i + 1; j <= N; ++j)
				if (dist(x[i], y[i], x[j], y[j]) <= 2500)
					edge[i].push_back(j), edge[j].push_back(i);

		int dis[1024];
		fill_n(dis, N + 1, -1);
		queue<int> q;
		q.push(0);
		dis[0] = 0;
		while (!q.empty())
		{
			int v = q.front(); q.pop();
			for (int i = 0; i < edge[v].size(); ++i)
			{
				int to = edge[v][i];
				if (dis[to] < 0)
				{
					q.push(to);
					dis[to] = dis[v] + 1;
				}
			}
		}
		int m = *max_element(dis, dis + (N + 1));
		if (m > 1 && X > Y)
			puts("You're always welcome!");
		else
			printf("%d\n", X * m);
	}
}
```