#include <bits/stdc++.h>

using namespace std;

#define REP(i, a, b) for (int i = (a), i##_end_ = (b); i < i##_end_; ++i)
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define mp make_pair
#define x first
#define y second
#define pb push_back
#define SZ(x) (int((x).size()))
#define ALL(x) (x).begin(), (x).end()

template<typename T> inline bool chkmin(T &a, const T &b) { return b < a ? a = b, 1 : 0; }
template<typename T> inline bool chkmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }

typedef long long LL;

const int oo = 0x3f3f3f3f;

const int Mod = 1e9 + 7;

const int inv2 = (Mod + 1) >> 1;

const int maxn = 110;

int n, K;
int dp[maxn + 5][maxn * maxn + 5];

int main()
{
#ifdef matthew99
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
	scanf("%d%d", &n, &K);
	dp[n][0] = 1;
	for (int i = n; i >= 1; --i) REP(j, 0, n * n + 1) if (dp[i][j])
	{
		REP(k, 0, K + 1)
		{
			if (k > i) (dp[i - 1][j] += dp[i][j]) %= Mod;
			else
			{
				(dp[i - 1][j + (k + j) / i] += dp[i][j]) %= Mod;
			}
		}
	}
	int ans = 1;
	REP(i, 0, n) ans = (LL)ans * (K + 1) % Mod;
	ans = (LL)ans * n % Mod * K % Mod * inv2 % Mod;
	REP(i, 0, n * n + 1) (ans -= (LL)i * dp[0][i] % Mod) %= Mod;
	(ans += Mod) %= Mod;
	printf("%d\n", ans);
	return 0;
}
