```go
package main
import (
"fmt"
)
func main() {
var a, b, c, d int
fmt.Scan(&a, &b, &c, &d)
const n, m = 50, 50
grid := make([][]byte, n)
for i := range grid {
grid[i] = make([]byte, m)
for j := range grid[i] {
if i < 25 {
grid[i][j] = 'C'
} else {
grid[i][j] = 'D'
}
}
}
cnt := 0
for i := 0; i < 25 && cnt < a; i += 2 {
for j := 0; j < m && cnt < a; j += 2 {
grid[i][j] = 'A'
cnt++
}
}
cnt = 0
for i := 0; i < 25 && cnt < b; i += 2 {
for j := 1; j < m && cnt < b; j += 2 {
grid[i][j] = 'B'
cnt++
}
}
if d > 1 {
cnt = 0
need := d - 1
for i := 1; i < 24 && cnt < need; i += 2 {
for j := 0; j < m && cnt < need; j += 2 {
grid[i][j] = 'D'
cnt++
}
}
}
if c > 1 {
cnt = 0
need := c - 1
for i := 26; i < n && cnt < need; i += 2 {
for j := 0; j < m && cnt < need; j += 2 {
grid[i][j] = 'C'
cnt++
}
}
}
fmt.Println(n, m)
for i := 0; i < n; i++ {
fmt.Println(string(grid[i]))
}
}
```