import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;

public class Barrels {
	public static Long myPow(Long a, Long b) {
		Long base = a;
		for (long i = 1; i < b; i++) {
			a *= base;
		}

		return a;
	}

	public static int count;

	public static Long a, b, c, k;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s;
		int line = 1;
		while ((s = br.readLine()) != null) {
			// System.out.println(s);
			String[] numbers = s.split(" ");

			if (numbers.length != 4) {
				return;
			}
			try {
				a = Long.parseLong(numbers[0]);
				b = Long.parseLong(numbers[1]);
				k = Long.parseLong(numbers[2]);
				c = Long.parseLong(numbers[3]);
			} catch (Exception e) {
				return;
			}
			
			if(k < 0 || k > 1000) {
				return;
			}
			
			if(a < 1 || a > 9 || b < 1 || b > 9 || c < 1 || c > 9) {
				return;
			}

			if (!(a == c || b == c)) {
				return;
			}
		}

		System.out.println(((long) (Math.pow(new Long(2), new Long(k)) * k) / 2) % 1000000007);

		/*
		 * ArrayList<Long> numbers = new ArrayList<>(); numbers.add(a); numbers.add(b);
		 * 
		 * Long newNumber;
		 * 
		 * 
		 * 
		 * int count = 0; for (Long i = new Long(0); i < k - 1; i++) { ArrayList<Long>
		 * oldNumbers = new ArrayList<>(numbers);
		 * 
		 * int oldSize = numbers.size(); for (int j = 0; j < oldSize; j++) { newNumber =
		 * numbers.get(j) + myPow(new Long(10), i + 1) * a; numbers.set(j, newNumber); }
		 * 
		 * for (int j = oldSize; j < oldSize * 2; j++) { newNumber = oldNumbers.get(j -
		 * oldSize) + myPow(new Long(10), i + 1) * b; numbers.add(newNumber); } }
		 * 
		 * 
		 * System.out.println((numbers.size() * k) / 2 % 1000000007);
		 */
	}
}

