import java.util.Scanner;

public class officebuilding_mn {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt(), m = sc.nextInt();
    int[][] cost = new int[n][m];
    int totalCost = 0;
    for (int i  = 0; i<n; i++) {
      for (int j = 0; j<m; j++) {
        cost[i][j] = sc.nextInt();
        totalCost += cost[i][j];
      }
    }
    int ret = 1000000000;
    int r = sc.nextInt(), c = sc.nextInt();
    String[] grid = new String[r];
    for (int i = 0; i<r; i++) {
      grid[i] = sc.next();
    }
    for (int iter = 0; iter < 4; iter++) {
      int temp = n;
      n = m;
      m = temp;

      int[][] rotated = new int[n][m];
      for (int i = 0; i<n; i++) {
        for (int j = 0; j<m; j++) {
          rotated[i][j] = cost[j][i];
        }
      }

      for (int i = 0; i<n; i++) {
        int ptr1 = 0, ptr2 = m-1;
        while (ptr1 < ptr2) {
          temp = rotated[i][ptr1];
          rotated[i][ptr1] = rotated[i][ptr2];
          rotated[i][ptr2] = temp;
          ptr1++;
          ptr2--;
        }
      }

      for (int x = 0; x + r <= n; x++) {
        for (int y = 0; y + c <= m; y++) {
          int curr = 0;
          for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
              if (grid[i].charAt(j) == '#') {
                curr += rotated[x+i][j+y];
              }
            }
          }
          ret = Math.min(ret, curr);
        }
      }

      cost = rotated;
    }
   
    System.out.println(totalCost - ret);
    sc.close();
  }  
}
