def solve(n, m, a, p):
    g = [[1 if (i, j) in set(p) else 0 for j in range(m)] for i in range(n)]
    dp = [[0] * (m + 1)]
    for i in range(1, n + 1):
        r = [0]
        for j in range(1, m + 1):
            r.append(dp[i - 1][j] + r[j - 1] - dp[i - 1][j - 1] + g[i - 1][j - 1])
        dp.append(r)
    for r in dp:
        print(r)
    def cnt(x0, y0, x1, y1):
        return  dp[x1][y1] + dp[x0][y0] - (dp[x1][y0] + dp[x0][y1])
    c_max = 0
    for d in range(1, a + 1):
        if a % d == 0:
            e = a // d
            for x, y in ((d, e), (e, d)):                               
                for i in range(n - x + 1):
                    for j in range(m - y + 1):
                        print(i, j, i + x, j + y)
                        c = cnt(i, j, i + x, j + y)
                        c_max = max(c, c_max)
            
    return c_max

n, m = 9, 2
a = 5
p =  [(0, 1), (7, 1), (2, 1), (0, 0), (3, 1), (1, 1), (8, 0), (1, 0)]
r = solve(n, m, a, p)
print(r)

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: