Problem: Problem Statement

Have you experienced $10$-by-$10$ grid calculation? It's a mathematical exercise common in Japan. In this problem, we consider the generalization of the exercise, $N$-by-$M$ grid calculation.

In this exercise, you are given an $N$-by-$M$ grid (i.e. a grid with $N$ rows and $M$ columns) with an additional column and row at the top and the left of the grid, respectively. Each cell of the additional column and row has a positive integer. Let's denote the sequence of integers on the column and row by $a$ and $b$, and the $i$-th integer from the top in the column is $a_i$ and the $j$-th integer from the left in the row is $b_j$, respectively.

Initially, each cell in the grid (other than the additional column and row) is blank. Let $(i, j)$ be the cell at the $i$-th from the top and the $j$-th from the left. The exercise expects you to fill all the cells so that the cell $(i, j)$ has $a_i \times b_j$. You have to start at the top-left cell. You repeat to calculate the multiplication $a_i \times b_j$ for a current cell $(i, j)$, and then move from left to right until you reach the rightmost cell, then move to the leftmost cell of the next row below.

At the end of the exercise, you will write a lot, really a lot of digits on the cells. Your teacher, who gave this exercise to you, looks like bothering to check entire cells on the grid to confirm that you have done this exercise. So the teacher thinks it is OK if you can answer the $d$-th digit (not integer, see an example below), you have written for randomly chosen $x$. Let's see an example.

<image>

For this example, you calculate values on cells, which are $8$, $56$, $24$, $1$, $7$, $3$ in order. Thus, you would write digits 8, 5, 6, 2, 4, 1, 7, 3. So the answer to a question $4$ is $2$.

You noticed that you can answer such questions even if you haven't completed the given exercise. Given a column $a$, a row $b$, and $Q$ integers $d_1, d_2, \dots, d_Q$, your task is to answer the $d_k$-th digit you would write if you had completed this exercise on the given grid for each $k$. Note that your teacher is not so kind (unfortunately), so may ask you numbers greater than you would write. For such questions, you should answer 'x' instead of a digit.

* * *

Input

The input consists of a single test case formatted as follows.

> $N$ $M$ $a_1$ $\ldots$ $a_N$ $b_1$ $\ldots$ $b_M$ $Q$ $d_1$ $\ldots$ $d_Q$

The first line contains two integers $N$ ($1 \le N \le 10^5$) and $M$ ($1 \le M \le 10^5$), which are the number of rows and columns of the grid, respectively.

The second line represents a sequence $a$ of $N$ integers, the $i$-th of which is the integer at the $i$-th from the top of the additional column on the left. It holds $1 \le a_i \le 10^9$ for $1 \le i \le N$.

The third line represents a sequence $b$ of $M$ integers, the $j$-th of which is the integer at the $j$-th from the left of the additional row on the top. It holds $1 \le b_j \le 10^9$ for $1 \le j \le M$.

The fourth line contains an integer $Q$ ($1 \le Q \le 3\times 10^5$), which is the number of questions your teacher would ask.

The fifth line contains a sequence $d$ of $Q$ integers, the $k$-th of which is the $k$-th question from the teacher, and it means you should answer the $d_k$-th digit you would write in this exercise. It holds $1 \le d_k \le 10^{15}$ for $1 \le k \le Q$.

Output

Output a string with $Q$ characters, the $k$-th of which is the answer to the $k$-th question in one line, where the answer to $k$-th question is the $d_k$-th digit you would write if $d_k$ is no more than the number of digits you would write, otherwise 'x'.

Examples

Input| Output
---|---


2 3
8 1
1 7 3
5
1 2 8 9 1000000000000000


|


853xx



3 4
271 828 18
2845 90 45235 3
7
30 71 8 61 28 90 42


|


7x406x0






Example

Input




Output

Solution (in CPP):

Solution:
#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<queue>
#include<ciso646>
#include<utility>
#include<map>
using namespace std;
typedef long long ll;
const ll mod = 1000000007;
const ll INF = mod * mod;
typedef pair<ll, ll> P;

#define rep(i,n) for(int i=0;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define all(x) (x).begin(),(x).end()
#define stop char nyaa; cin>>nyaa;

ll sum[100001][300];
ll truesum[100000][300];
int sz = 300;
ll t10[19];


int lenq(ll a, ll b) {
	return upper_bound(t10, t10 + 19, a*b)-t10;
}
void solve() {
	t10[0] = 1;
	rep(i, 18) {
		t10[i + 1] = t10[i] * 10;
	}
	int n, m; cin >> n >> m;
	vector<ll> a(n);
	vector<ll> b(m);
	rep(i, n) {
		cin >> a[i];
	}
	rep(i, m) {
		cin >> b[i];
	}
	vector<int> x;
	rep(i, n)x.push_back(a[i]);
	sort(x.begin(), x.end());
	x.erase(unique(x.begin(), x.end()), x.end());
	int di = (m + sz - 1) / sz;
	rep(i, m) {
		ll s = b[i];
		int le = 0;
		int loc = i / di;
		rep1(j, 18) {
			int id = lower_bound(x.begin(), x.end(), (t10[j]+s-1) / s) - x.begin();
			sum[le][loc] += j;
			sum[id][loc] -= j;
			le = id;
		}
			sum[le][loc] += 19;
			sum[x.size()][loc] -= 19;
	}
	rep(i, x.size()) {
		rep(j, sz) {
			sum[i + 1][j] += sum[i][j];
		}
	}
	vector<ll> alsum(n, 0);
	rep(i, n) {
		int id = lower_bound(x.begin(), x.end(), a[i]) - x.begin();
		rep(j, sz) {
			truesum[i][j] = sum[id][j];
			alsum[i] += truesum[i][j];
		}
	}
	vector<ll> allsum(n + 1, 0);
	rep(i, n) {
		allsum[i + 1] = allsum[i] + alsum[i];
	}
	/*rep(i, n + 1) {
		cout << "! " << allsum[i] << endl;
	}*/
	string ans;
	int q; cin >> q;
	//cout << allsum[n] << endl;
	rep(aa, q) {
		ll x; cin >> x; x--;
		if (x >= allsum[n]) {
			//cout << 'x'; 
			ans.push_back('x');
			continue;
		}
		int rw = upper_bound(allsum.begin(), allsum.end(), x) - allsum.begin();
		rw--;
		ll rest = x - allsum[rw];
		int loc = rw;
		int chk = sz - 1;
		rep(j, sz) {
			if (truesum[loc][j] <= rest) {
				rest -= truesum[loc][j];
			}
			else {
				chk = j; break;
			}
		}
		int sta = di * chk;
		while (true) {
			//cout << loc << " " << sta << " "<<rest<<endl;
			int len = lenq(a[loc], b[sta]);
			if (len > rest) {
				string st = to_string(a[loc] * b[sta]);
				//cout << st[rest];
				ans.push_back(st[rest]);
				break;
			}
			else {
				rest -= len;
				sta++;
			}
		}

	}
	cout << ans<<endl;
}

signed main() {
	cin.tie(0);
	ios::sync_with_stdio(false);
	//find_prime();
	solve();
	//stop
		return 0;
}