Problem: Let's assume that p and q are strings of positive length, called the container and the key correspondingly, string q only consists of characters 0 and 1. Let's take a look at a simple algorithm that extracts message s from the given container p:
    
    
      
    i = 0;  
    j = 0;  
    s = <>;  
    while i is less than the length of the string p  
    {  
        if q[j] == 1, then add to the right of string s character p[i];  
        increase variables i, j by one;  
        if the value of the variable j equals the length of the string q, then j = 0;   
    }  
    

In the given pseudocode i, j are integer variables, s is a string, '=' is an assignment operator, '==' is a comparison operation, '[]' is the operation of obtaining the string character with the preset index, '<>' is an empty string. We suppose that in all strings the characters are numbered starting from zero. 

We understand that implementing such algorithm is quite easy, so your task is going to be slightly different. You need to construct the lexicographically minimum key of length k, such that when it is used, the algorithm given above extracts message s from container p (otherwise find out that such key doesn't exist).

Input

The first two lines of the input are non-empty strings p and s (1 ≤ |p| ≤ 106, 1 ≤ |s| ≤ 200), describing the container and the message, correspondingly. The strings can contain any characters with the ASCII codes from 32 to 126, inclusive.

The third line contains a single integer k (1 ≤ k ≤ 2000) — the key's length.

Output

Print the required key (string of length k, consisting only of characters 0 and 1). If the key doesn't exist, print the single character 0.

Examples

Input

abacaba
aba
6


Output

100001


Input

abacaba
aba
3


Output

0

Note

String x = x1x2... xp is lexicographically smaller than string y = y1y2... yq, if either p < q and x1 = y1, x2 = y2, ... , xp = yp, or there exists such integer r (0 ≤ r < min(p, q)) that x1 = y1, x2 = y2, ... , xr = yr and xr + 1 < yr + 1. Symbols are compared according to their ASCII codes.

Solution (in JAVA):

Solution:
//package round193;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.InputMismatchException;

public class E4 {
	InputStream is;
	PrintWriter out;
	String INPUT = "";
	
	long h(char[] c)
	{
		long h = c.length;
		for(char v : c){
			h = h * 31 + v;
		}
		return h;
	}
	
	void solve()
	{
		char[] P = ns().toCharArray();
		char[] S = ns().toCharArray();
		int n = P.length, m = S.length;
		int K = ni();
		
		char[][] ps = new char[K][];
		long[] hps = new long[K];
		for(int i = 0;i < K;i++){
			ps[i] = new char[(n+K-i-1)/K];
			for(int j = i, k = 0;j < n;j+=K, k++){
				ps[i][k] = P[j];
			}
			hps[i] = h(ps[i]);
		}
		
		String opt = "~";
		
		outer:
		for(int j = 1;j <= K;j++){
			char[][] qs = new char[j][];
			long[] hqs = new long[j];
			for(int o = 0;o < j;o++){
				int slen = (m-o+j-1)/j;
				qs[o] = new char[slen];
				for(int k = o, l = 0;k < m;k+=j, l++){
					qs[o][l] = S[k];
				}
				hqs[o] = h(qs[o]);
			}
			char[] ret = new char[K];
			Arrays.fill(ret, '0');
			
			int y = j-1;
			for(int z = K-1;z >= 0 && y >= 0;z--){
				if(hps[z] == hqs[y] && Arrays.equals(ps[z], qs[y])){
					ret[z] = '1';
					y--;
				}
			}
			if(y >= 0)continue outer;
			String T = new String(ret);
			if(T.compareTo(opt) < 0){
				opt = T;
			}
		}
		if(opt.equals("~")){
			out.println(0);
		}else{
			out.println(opt);
		}
	}
	
	void run() throws Exception
	{
//		int n = 1000000, m = 200, K = 2000;
//		Random gen = new Random();
//		StringBuilder sb = new StringBuilder();
//		for(int i = 0;i < n;i++){
//			sb.append('A');
////			sb.append((char)('A'+gen.nextInt(2)));
//		}
//		sb.append("\n");
//		for(int i = 0;i < m;i++){
//			sb.append('A');
////			sb.append((char)('A'+gen.nextInt(2)));
//		}
//		sb.append("\n");
//		sb.append(K);
//		INPUT = sb.toString();
		
		is = oj ? System.in : new ByteArrayInputStream(INPUT.getBytes());
		out = new PrintWriter(System.out);
		
		long s = System.currentTimeMillis();
		solve();
		out.flush();
		tr(System.currentTimeMillis()-s+"ms");
	}
	
	public static void main(String[] args) throws Exception { new E4().run(); }
	
	private byte[] inbuf = new byte[1024];
	private int lenbuf = 0, ptrbuf = 0;
	
	private int readByte()
	{
		if(lenbuf == -1)throw new InputMismatchException();
		if(ptrbuf >= lenbuf){
			ptrbuf = 0;
			try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
			if(lenbuf <= 0)return -1;
		}
		return inbuf[ptrbuf++];
	}
	
	private boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }
	private int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b) && b != ' '); return b; }
	
	private double nd() { return Double.parseDouble(ns()); }
	private char nc() { return (char)skip(); }
	
	private String ns()
	{
		int b = skip();
		StringBuilder sb = new StringBuilder();
		while(!(isSpaceChar(b) && b != ' ')){
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}
	
	private char[] ns(int n)
	{
		char[] buf = new char[n];
		int b = skip(), p = 0;
		while(p < n && !(isSpaceChar(b))){
			buf[p++] = (char)b;
			b = readByte();
		}
		return n == p ? buf : Arrays.copyOf(buf, p);
	}
	
	private char[][] nm(int n, int m)
	{
		char[][] map = new char[n][];
		for(int i = 0;i < n;i++)map[i] = ns(m);
		return map;
	}
	
	private int[] na(int n)
	{
		int[] a = new int[n];
		for(int i = 0;i < n;i++)a[i] = ni();
		return a;
	}
	
	private int ni()
	{
		int num = 0, b;
		boolean minus = false;
		while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
		if(b == '-'){
			minus = true;
			b = readByte();
		}
		
		while(true){
			if(b >= '0' && b <= '9'){
				num = num * 10 + (b - '0');
			}else{
				return minus ? -num : num;
			}
			b = readByte();
		}
	}
	
	private long nl()
	{
		long num = 0;
		int b;
		boolean minus = false;
		while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
		if(b == '-'){
			minus = true;
			b = readByte();
		}
		
		while(true){
			if(b >= '0' && b <= '9'){
				num = num * 10 + (b - '0');
			}else{
				return minus ? -num : num;
			}
			b = readByte();
		}
	}
	
	private boolean oj = System.getProperty("ONLINE_JUDGE") != null;
	private void tr(Object... o) { if(!oj)System.out.println(Arrays.deepToString(o)); }
}