#include <iostream>
#include <vector>
using namespace std;
const int MOD = 998244353;
vector<vector<int>> adj;
vector<int> sizes;
void dfs(int u, int parent) {
sizes[u] = 1;
for (int v : adj[u]) {
if (v != parent) {
dfs(v, u);
sizes[u] += sizes[v];
}
}
}
int solve(int u, int parent, int l) {
int ans = 1;
for (int v : adj[u]) {
if (v != parent) {
ans = (ans * solve(v, u, l)) % MOD;
}
}
if (l == 0) {
return ans;
} else {
return (ans * (sizes[u] + 1)) % MOD;
}
}
int main() {
int n, L, k;
cin >> n >> L >> k;
adj.resize(n + 1);
sizes.resize(n + 1);
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1, 0);
int ans = solve(1, 0, L);
cout << ans << endl;
return 0;
}