def main(): import sys input = sys.stdin.read data = input().split() idx = 0 n = int(data[idx]) idx += 1 m = int(data[idx]) idx += 1 T = int(data[idx]) idx += 1 out_degree = [0] * n matrix = [0] * n for _ in range(m): a = int(data[idx]) idx += 1 b = int(data[idx]) idx += 1 matrix[a] |= 1 << b out_degree[a] += 1 def pow_matrix_vector(A, power, n): if power == 0: return 1 << 0 # Initial position is vertex 0 result = 1 << 0 # Start at vertex 0 current_op = A.copy() while power > 0: if power % 2 == 1: new_result = 0 mask = result u = 0 while mask and u < n: if mask & 1: new_result |= current_op[u] mask >>= 1 u += 1 result = new_result # Square the current operator new_current = [0] * n for u in range(n): row = current_op[u] val = 0 bits = row v = 0 while bits and v < n: if bits & 1: val |= current_op[v] bits >>= 1 v += 1 new_current[u] = val current_op = new_current power //= 2 return result reachable_mask = pow_matrix_vector(matrix, T, n) count = 0 for u in range(n): if (reachable_mask & (1 << u)) and out_degree[u] > 0: count += 1 print(count) if __name__ == '__main__': main()